This commit is contained in:
Lightczx
2024-06-21 17:20:48 +08:00
parent 3f110fd4d3
commit f8c224048e
210 changed files with 1535 additions and 1742 deletions

View File

@@ -8,28 +8,28 @@
<XamlControlsResources/>
<ResourceDictionary Source="ms-appx:///CommunityToolkit.WinUI.Controls.SettingsControls/SettingsCard/SettingsCard.xaml"/>
<ResourceDictionary Source="ms-appx:///CommunityToolkit.WinUI.Controls.TokenizingTextBox/TokenizingTextBox.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Loading.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Image/CachedImage.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/Card.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/Color.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/ComboBox.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/Converter.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/CornerRadius.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/FlyoutStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/FontStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/Glyph.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/InfoBarOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/ItemsPanelTemplate.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/NumericValue.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/PageOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/PivotOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/ScrollViewer.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/SegmentedOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/SettingsStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/Thickness.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/TransitionCollection.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/Uri.xaml"/>
<ResourceDictionary Source="ms-appx:///Control/Theme/WindowOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Loading.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Image/CachedImage.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Card.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Color.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/ComboBox.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Converter.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/CornerRadius.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/FlyoutStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/FontStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Glyph.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/InfoBarOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/ItemsPanelTemplate.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/NumericValue.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/PageOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/PivotOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/ScrollViewer.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/SegmentedOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/SettingsStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Thickness.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/TransitionCollection.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/Uri.xaml"/>
<ResourceDictionary Source="ms-appx:///UI/Xaml/Control/Theme/WindowOverride.xaml"/>
<ResourceDictionary Source="ms-appx:///View/Card/Primitive/CardProgressBar.xaml"/>
<ResourceDictionary Source="ms-appx:///View/Control/RateDeltaTextBlockStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>

View File

@@ -1,64 +0,0 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using System.Buffers.Binary;
using System.Runtime.CompilerServices;
using Windows.UI;
namespace Snap.Hutao.Control.Media;
/// <summary>
/// BGRA 结构
/// </summary>
[HighQuality]
internal struct Bgra32
{
/// <summary>
/// B
/// </summary>
public byte B;
/// <summary>
/// G
/// </summary>
public byte G;
/// <summary>
/// R
/// </summary>
public byte R;
/// <summary>
/// A
/// </summary>
public byte A;
public Bgra32(byte b, byte g, byte r, byte a)
{
B = b;
G = g;
R = r;
A = a;
}
public readonly double Luminance { get => ((0.299 * R) + (0.587 * G) + (0.114 * B)) / 255; }
/// <summary>
/// 从 Color 转换
/// </summary>
/// <param name="color">颜色</param>
/// <returns>新的 BGRA8 结构</returns>
public static unsafe implicit operator Bgra32(Color color)
{
Unsafe.SkipInit(out Bgra32 bgra8);
*(uint*)&bgra8 = BinaryPrimitives.ReverseEndianness(*(uint*)&color);
return bgra8;
}
public static unsafe implicit operator Color(Bgra32 bgra8)
{
Unsafe.SkipInit(out Color color);
*(uint*)&color = BinaryPrimitives.ReverseEndianness(*(uint*)&bgra8);
return color;
}
}

View File

@@ -1,32 +0,0 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
// Some part of this file came from:
// https://github.com/xunkong/desktop/tree/main/src/Desktop/Desktop/Pages/CharacterInfoPage.xaml.cs
namespace Snap.Hutao.Control.Media;
/// <summary>
/// Defines a color in Hue/Saturation/Lightness (HSL) space.
/// </summary>
internal struct Hsla32
{
/// <summary>
/// The Hue in 0..360 range.
/// </summary>
public double H;
/// <summary>
/// The Saturation in 0..1 range.
/// </summary>
public double S;
/// <summary>
/// The Lightness in 0..1 range.
/// </summary>
public double L;
/// <summary>
/// The Alpha/opacity in 0..1 range.
/// </summary>
public double A;
}

View File

@@ -1,150 +0,0 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
// Some part of this file came from:
// https://github.com/xunkong/desktop/tree/main/src/Desktop/Desktop/Pages/CharacterInfoPage.xaml.cs
using System.Buffers.Binary;
using Windows.UI;
namespace Snap.Hutao.Control.Media;
[HighQuality]
internal struct Rgba32
{
public byte R;
public byte G;
public byte B;
public byte A;
public Rgba32(string hex)
: this(hex.Length == 6 ? Convert.ToUInt32($"{hex}FF", 16) : Convert.ToUInt32(hex, 16))
{
}
public unsafe Rgba32(uint xrgbaCode)
{
// uint layout: 0xRRGGBBAA is AABBGGRR
// AABBGGRR -> RRGGBBAA
fixed (Rgba32* pSelf = &this)
{
*(uint*)pSelf = BinaryPrimitives.ReverseEndianness(xrgbaCode);
}
}
private Rgba32(byte r, byte g, byte b, byte a)
{
R = r;
G = g;
B = b;
A = a;
}
public static unsafe implicit operator Color(Rgba32 hexColor)
{
// Goal : Rgba32:RRGGBBAA(0xAABBGGRR) -> Color: AARRGGBB(0xBBGGRRAA)
// Step1: Rgba32:RRGGBBAA(0xAABBGGRR) -> UInt32:AA000000(0x000000AA)
uint a = ((*(uint*)&hexColor) >> 24) & 0x000000FF;
// Step2: Rgba32:RRGGBBAA(0xAABBGGRR) -> UInt32:00RRGGBB(0xRRGGBB00)
uint rgb = ((*(uint*)&hexColor) << 8) & 0xFFFFFF00;
// Step2: UInt32:00RRGGBB(0xRRGGBB00) + UInt32:AA000000(0x000000AA) -> UInt32:AARRGGBB(0xRRGGBBAA)
uint rgba = rgb + a;
return *(Color*)&rgba;
}
public static Rgba32 FromHsl(Hsla32 hsl)
{
double chroma = (1 - Math.Abs((2 * hsl.L) - 1)) * hsl.S;
double h1 = hsl.H / 60;
double x = chroma * (1 - Math.Abs((h1 % 2) - 1));
double m = hsl.L - (0.5 * chroma);
double r1, g1, b1;
if (h1 < 1)
{
r1 = chroma;
g1 = x;
b1 = 0;
}
else if (h1 < 2)
{
r1 = x;
g1 = chroma;
b1 = 0;
}
else if (h1 < 3)
{
r1 = 0;
g1 = chroma;
b1 = x;
}
else if (h1 < 4)
{
r1 = 0;
g1 = x;
b1 = chroma;
}
else if (h1 < 5)
{
r1 = x;
g1 = 0;
b1 = chroma;
}
else
{
r1 = chroma;
g1 = 0;
b1 = x;
}
byte r = (byte)(255 * (r1 + m));
byte g = (byte)(255 * (g1 + m));
byte b = (byte)(255 * (b1 + m));
byte a = (byte)(255 * hsl.A);
return new(r, g, b, a);
}
public readonly Hsla32 ToHsl()
{
const double toDouble = 1.0 / 255;
double r = toDouble * R;
double g = toDouble * G;
double b = toDouble * B;
double max = Math.Max(Math.Max(r, g), b);
double min = Math.Min(Math.Min(r, g), b);
double chroma = max - min;
double h1;
if (chroma == 0)
{
h1 = 0;
}
else if (max == r)
{
// The % operator doesn't do proper modulo on negative
// numbers, so we'll add 6 before using it
h1 = (((g - b) / chroma) + 6) % 6;
}
else if (max == g)
{
h1 = 2 + ((b - r) / chroma);
}
else
{
h1 = 4 + ((r - g) / chroma);
}
double lightness = 0.5 * (max + min);
double saturation = chroma == 0 ? 0 : chroma / (1 - Math.Abs((2 * lightness) - 1));
Hsla32 ret;
ret.H = 60 * h1;
ret.S = saturation;
ret.L = lightness;
ret.A = toDouble * A;
return ret;
}
}

View File

@@ -1,12 +1,13 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.UI;
using Snap.Hutao.Win32.System.WinRT;
using Windows.Foundation;
using Windows.Graphics.Imaging;
using WinRT;
namespace Snap.Hutao.Control.Media;
namespace Snap.Hutao.Core.Graphics.Imaging;
/// <summary>
/// 软件位图拓展

View File

@@ -5,8 +5,7 @@
xmlns:cw="using:CommunityToolkit.WinUI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shch="using:Snap.Hutao.Control.Helper"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shcwb="using:Snap.Hutao.Core.Windowing.Backdrop"
xmlns:shv="using:Snap.Hutao.ViewModel"
ShouldConstrainToRootBounds="False"
@@ -42,7 +41,7 @@
HorizontalAlignment="Right"
Orientation="Horizontal"
Spacing="2">
<AppBarButton Command="{Binding ShowWindowCommand}" Label="{shcm:ResourceString Name=CoreWindowingNotifyIconViewLabel}">
<AppBarButton Command="{Binding ShowWindowCommand}" Label="{shuxm:ResourceString Name=CoreWindowingNotifyIconViewLabel}">
<AppBarButton.Icon>
<FontIcon
Width="20"
@@ -50,7 +49,7 @@
Glyph="&#xE80F;"/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Command="{Binding LaunchGameCommand}" Label="{shcm:ResourceString Name=CoreWindowingNotifyIconLaunchGameLabel}">
<AppBarButton Command="{Binding LaunchGameCommand}" Label="{shuxm:ResourceString Name=CoreWindowingNotifyIconLaunchGameLabel}">
<AppBarButton.Icon>
<FontIcon
Width="20"
@@ -58,7 +57,7 @@
Glyph="&#xE7FC;"/>
</AppBarButton.Icon>
</AppBarButton>
<AppBarButton Command="{Binding ExitCommand}" Label="{shcm:ResourceString Name=CoreWindowingNotifyIconExitLabel}">
<AppBarButton Command="{Binding ExitCommand}" Label="{shuxm:ResourceString Name=CoreWindowingNotifyIconExitLabel}">
<AppBarButton.Icon>
<FontIcon
Width="20"

View File

@@ -14,6 +14,7 @@ using Snap.Hutao.Core.Setting;
using Snap.Hutao.Core.Windowing.Abstraction;
using Snap.Hutao.Core.Windowing.NotifyIcon;
using Snap.Hutao.Service;
using Snap.Hutao.UI.Xaml.Control.Theme;
using Snap.Hutao.Win32;
using Snap.Hutao.Win32.Foundation;
using Snap.Hutao.Win32.Graphics.Dwm;
@@ -213,7 +214,7 @@ internal sealed class XamlWindowController
private unsafe void UpdateImmersiveDarkMode(FrameworkElement titleBar, object discard)
{
BOOL isDarkMode = Control.Theme.ThemeHelper.IsDarkMode(titleBar.ActualTheme);
BOOL isDarkMode = ThemeHelper.IsDarkMode(titleBar.ActualTheme);
DwmSetWindowAttribute(window.GetWindowHandle(), DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, ref isDarkMode);
}
#endregion
@@ -296,12 +297,12 @@ internal sealed class XamlWindowController
appTitleBar.ButtonBackgroundColor = Colors.Transparent;
appTitleBar.ButtonInactiveBackgroundColor = Colors.Transparent;
bool isDarkMode = Control.Theme.ThemeHelper.IsDarkMode(xamlWindow.TitleBarAccess.ActualTheme);
bool isDarkMode = ThemeHelper.IsDarkMode(xamlWindow.TitleBarAccess.ActualTheme);
Color systemBaseLowColor = Control.Theme.SystemColors.BaseLowColor(isDarkMode);
Color systemBaseLowColor = SystemColors.BaseLowColor(isDarkMode);
appTitleBar.ButtonHoverBackgroundColor = systemBaseLowColor;
Color systemBaseMediumLowColor = Control.Theme.SystemColors.BaseMediumLowColor(isDarkMode);
Color systemBaseMediumLowColor = SystemColors.BaseMediumLowColor(isDarkMode);
appTitleBar.ButtonPressedBackgroundColor = systemBaseMediumLowColor;
// The Foreground doesn't accept Alpha channel. So we translate it to gray.
@@ -309,7 +310,7 @@ internal sealed class XamlWindowController
byte result = (byte)((systemBaseMediumLowColor.A / 255.0) * light);
appTitleBar.ButtonInactiveForegroundColor = Color.FromArgb(0xFF, result, result, result);
Color systemBaseHighColor = Control.Theme.SystemColors.BaseHighColor(isDarkMode);
Color systemBaseHighColor = SystemColors.BaseHighColor(isDarkMode);
appTitleBar.ButtonForegroundColor = systemBaseHighColor;
appTitleBar.ButtonHoverForegroundColor = systemBaseHighColor;
appTitleBar.ButtonPressedForegroundColor = systemBaseHighColor;

View File

@@ -4,7 +4,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shvg="using:Snap.Hutao.View.Guide"
mc:Ignorable="d">
@@ -21,7 +21,7 @@
Margin="12,0,0,0"
VerticalAlignment="Center"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{shcm:ResourceString Name=GuideWindowTitle}"
Text="{shuxm:ResourceString Name=GuideWindowTitle}"
TextWrapping="NoWrap"/>
</Grid>
<shvg:GuideView Grid.Row="1"/>

View File

@@ -4,13 +4,13 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
mc:Ignorable="d">
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center"
Spacing="3">
<TextBlock Text="{shcm:ResourceString Name=WindowIdentifyMonitorHeader}"/>
<TextBlock Text="{shuxm:ResourceString Name=WindowIdentifyMonitorHeader}"/>
<TextBlock
Style="{StaticResource SubtitleTextBlockStyle}"
Text="{x:Bind Monitor}"

View File

@@ -5,7 +5,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mxi="using:Microsoft.Xaml.Interactivity"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
xmlns:shuxb="using:Snap.Hutao.UI.Xaml.Behavior"
xmlns:shvg="using:Snap.Hutao.ViewModel.Game"
mc:Ignorable="d">
@@ -28,7 +28,7 @@
Margin="12,0,0,0"
VerticalAlignment="Center"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{shcm:ResourceString Name=LaunchGameTitle}"
Text="{shuxm:ResourceString Name=LaunchGameTitle}"
TextWrapping="NoWrap"/>
</Grid>
@@ -44,7 +44,7 @@
<TextBlock
Opacity="0.8"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding AttachUid, TargetNullValue={shcm:ResourceString Name=ViewPageLaunchGameSwitchAccountAttachUidNull}}"/>
Text="{Binding AttachUid, TargetNullValue={shuxm:ResourceString Name=ViewPageLaunchGameSwitchAccountAttachUidNull}}"/>
</StackPanel>
</Grid>
</DataTemplate>
@@ -56,6 +56,6 @@
Margin="16"
HorizontalAlignment="Stretch"
Command="{Binding LaunchCommand}"
Content="{shcm:ResourceString Name=ViewPageLaunchGameAction}"/>
Content="{shuxm:ResourceString Name=ViewPageLaunchGameAction}"/>
</Grid>
</Window>

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,9 +1,9 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,11 +1,11 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Metadata;
using Snap.Hutao.Model.Metadata.Avatar;
using Snap.Hutao.Model.Primitive;
using Snap.Hutao.UI.Xaml.Data;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;

View File

@@ -1,8 +1,8 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.UI.Xaml.Data;
using System.Collections.Frozen;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,8 +1,8 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -2,9 +2,9 @@
// Licensed under the MIT license.
using Microsoft.UI;
using Snap.Hutao.Control;
using Snap.Hutao.Control.Theme;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.UI.Xaml.Control.Theme;
using Snap.Hutao.UI.Xaml.Data;
using System.Collections.Frozen;
using Windows.UI;

View File

@@ -1,8 +1,8 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml.Data;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,9 +1,9 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.UI.Xaml.Data;
using System.Collections.Frozen;
namespace Snap.Hutao.Model.Metadata.Converter;

View File

@@ -1,10 +1,11 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control.Media;
using Snap.Hutao.Core;
using Snap.Hutao.Core.Caching;
using Snap.Hutao.Core.Graphics.Imaging;
using Snap.Hutao.Core.IO;
using Snap.Hutao.UI;
using Snap.Hutao.Web.Hutao.Wallpaper;
using Snap.Hutao.Web.Response;
using Snap.Hutao.Win32.Foundation;
@@ -72,7 +73,7 @@ internal sealed partial class BackgroundImageService : IBackgroundImageService
Path = path,
ImageSource = new(path.ToUri()),
AccentColor = accentColor,
Luminance = accentColor.Luminance,
Luminance = accentColor.Brightness,
};
return new(true, background);

View File

@@ -1,9 +1,9 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control.Media;
using Snap.Hutao.Core;
using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.UI;
using Snap.Hutao.Win32.Graphics.Direct3D11;
using Snap.Hutao.Win32.Graphics.Dxgi;
using Snap.Hutao.Win32.Graphics.Dxgi.Common;

View File

@@ -2,7 +2,7 @@
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Control;
using Snap.Hutao.UI.Xaml;
namespace Snap.Hutao.Service.Navigation;

View File

@@ -2,10 +2,10 @@
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Control;
using Snap.Hutao.Core.Logging;
using Snap.Hutao.Core.Setting;
using Snap.Hutao.Service.Notification;
using Snap.Hutao.UI.Xaml.Control;
using Snap.Hutao.View.Helper;
using Snap.Hutao.View.Page;
using Windows.Foundation;

View File

@@ -89,26 +89,26 @@
<None Remove="CodeMetricsConfig.txt" />
<None Remove="Control\Image\CachedImage.xaml" />
<None Remove="Control\Loading.xaml" />
<None Remove="Control\Panel\PanelSelector.xaml" />
<None Remove="Control\Theme\Card.xaml" />
<None Remove="Control\Theme\Color.xaml" />
<None Remove="Control\Theme\ComboBox.xaml" />
<None Remove="Control\Theme\Converter.xaml" />
<None Remove="Control\Theme\CornerRadius.xaml" />
<None Remove="Control\Theme\FlyoutStyle.xaml" />
<None Remove="Control\Theme\FontStyle.xaml" />
<None Remove="Control\Theme\Glyph.xaml" />
<None Remove="Control\Theme\InfoBarOverride.xaml" />
<None Remove="Control\Theme\ItemsPanelTemplate.xaml" />
<None Remove="Control\Theme\NumericValue.xaml" />
<None Remove="Control\Theme\PageOverride.xaml" />
<None Remove="Control\Theme\PivotOverride.xaml" />
<None Remove="Control\Theme\ScrollViewer.xaml" />
<None Remove="Control\Theme\SettingsStyle.xaml" />
<None Remove="Control\Theme\Thickness.xaml" />
<None Remove="Control\Theme\TransitionCollection.xaml" />
<None Remove="Control\Theme\Uri.xaml" />
<None Remove="Control\Theme\WindowOverride.xaml" />
<None Remove="Control\Panel\LayoutSwitch.xaml" />
<None Remove="UI\Xaml\Control\Theme\Card.xaml" />
<None Remove="UI\Xaml\Control\Theme\Color.xaml" />
<None Remove="UI\Xaml\Control\Theme\ComboBox.xaml" />
<None Remove="UI\Xaml\Control\Theme\Converter.xaml" />
<None Remove="UI\Xaml\Control\Theme\CornerRadius.xaml" />
<None Remove="UI\Xaml\Control\Theme\FlyoutStyle.xaml" />
<None Remove="UI\Xaml\Control\Theme\FontStyle.xaml" />
<None Remove="UI\Xaml\Control\Theme\Glyph.xaml" />
<None Remove="UI\Xaml\Control\Theme\InfoBarOverride.xaml" />
<None Remove="UI\Xaml\Control\Theme\ItemsPanelTemplate.xaml" />
<None Remove="UI\Xaml\Control\Theme\NumericValue.xaml" />
<None Remove="UI\Xaml\Control\Theme\PageOverride.xaml" />
<None Remove="UI\Xaml\Control\Theme\PivotOverride.xaml" />
<None Remove="UI\Xaml\Control\Theme\ScrollViewer.xaml" />
<None Remove="UI\Xaml\Control\Theme\SettingsStyle.xaml" />
<None Remove="UI\Xaml\Control\Theme\Thickness.xaml" />
<None Remove="UI\Xaml\Control\Theme\TransitionCollection.xaml" />
<None Remove="UI\Xaml\Control\Theme\Uri.xaml" />
<None Remove="UI\Xaml\Control\Theme\WindowOverride.xaml" />
<None Remove="Core\Windowing\NotifyIcon\NotifyIconContextMenu.xaml" />
<None Remove="GuideWindow.xaml" />
<None Remove="IdentifyMonitorWindow.xaml" />
@@ -393,16 +393,6 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\SegmentedOverride.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\Thickness.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Page\FeedbackPage.xaml">
<Generator>MSBuild:Compile</Generator>
@@ -423,23 +413,6 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\ComboBox.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\ScrollViewer.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\FlyoutStyle.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Dialog\HutaoPassportUnregisterDialog.xaml">
@@ -471,96 +444,12 @@
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\NumericValue.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\CornerRadius.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\Color.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\Card.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Image\CachedImage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\ItemsPanelTemplate.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\Converter.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\Glyph.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\Uri.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\TransitionCollection.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\SettingsStyle.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\PivotOverride.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\PageOverride.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\WindowOverride.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Theme\InfoBarOverride.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="View\Card\Primitive\CardProgressBar.xaml">
<Generator>MSBuild:Compile</Generator>
@@ -844,7 +733,7 @@
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Control\Panel\PanelSelector.xaml">
<Page Update="Control\Panel\LayoutSwitch.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
@@ -878,4 +767,7 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Folder Include="UI\Xaml\Control\Image\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,37 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using System.Buffers.Binary;
using System.Runtime.CompilerServices;
using Windows.UI;
namespace Snap.Hutao.UI;
[HighQuality]
internal struct Bgra32
{
public byte B;
public byte G;
public byte R;
public byte A;
public Bgra32(byte b, byte g, byte r, byte a)
{
B = b;
G = g;
R = r;
A = a;
}
public readonly double Brightness { get => ((0.299 * R) + (0.587 * G) + (0.114 * B)) / 255; }
public static unsafe implicit operator Bgra32(Color color)
{
return ColorHelper.ToBgra32(color);
}
public static unsafe implicit operator Color(Bgra32 bgra8)
{
return ColorHelper.ToColor(bgra8);
}
}

View File

@@ -0,0 +1,105 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using System.Buffers.Binary;
using System.Runtime.CompilerServices;
using Windows.UI;
namespace Snap.Hutao.UI;
internal static class ColorHelper
{
public static unsafe Bgra32 ToBgra32(Color color)
{
uint value = BinaryPrimitives.ReverseEndianness(*(uint*)&color);
return *(Bgra32*)&value;
}
public static unsafe Color ToColor(Bgra32 bgra32)
{
uint value = BinaryPrimitives.ReverseEndianness(*(uint*)&bgra32);
return *(Color*)&value;
}
public static unsafe Color ToColor(Rgba32 rgba32)
{
// Goal : Rgba32:RRGGBBAA(0xAABBGGRR) -> Color: AARRGGBB(0xBBGGRRAA)
// Step1: Rgba32:RRGGBBAA(0xAABBGGRR) -> UInt32:AA000000(0x000000AA)
uint a = *(uint*)&rgba32 >>> 24;
// Step2: Rgba32:RRGGBBAA(0xAABBGGRR) -> UInt32:00RRGGBB(0xRRGGBB00)
uint rgb = *(uint*)&rgba32 << 8;
// Step2: UInt32:00RRGGBB(0xRRGGBB00) + UInt32:AA000000(0x000000AA) -> UInt32:AARRGGBB(0xRRGGBBAA)
uint rgba = rgb + a;
return *(Color*)&rgba;
}
public static Hsla32 ToHsla32(Rgba32 rgba32)
{
const double toDouble = 1.0 / 255;
double r = toDouble * rgba32.R;
double g = toDouble * rgba32.G;
double b = toDouble * rgba32.B;
double max = Math.Max(Math.Max(r, g), b);
double min = Math.Min(Math.Min(r, g), b);
double chroma = max - min;
double h1;
if (chroma == 0)
{
h1 = 0;
}
else if (max == r)
{
// The % operator doesn't do proper modulo on negative
// numbers, so we'll add 6 before using it
h1 = (((g - b) / chroma) + 6) % 6;
}
else if (max == g)
{
h1 = 2 + ((b - r) / chroma);
}
else
{
h1 = 4 + ((r - g) / chroma);
}
double lightness = 0.5 * (max + min);
double saturation = chroma == 0 ? 0 : chroma / (1 - Math.Abs((2 * lightness) - 1));
Hsla32 ret;
ret.H = 60 * h1;
ret.S = saturation;
ret.L = lightness;
ret.A = toDouble * rgba32.A;
return ret;
}
public static Rgba32 ToRgba32(Hsla32 hsla32)
{
double chroma = (1 - Math.Abs((2 * hsla32.L) - 1)) * hsla32.S;
double h1 = hsla32.H / 60;
double x = chroma * (1 - Math.Abs((h1 % 2) - 1));
double m = hsla32.L - (0.5 * chroma);
double r1, g1, b1;
(r1, g1, b1) = ((double, double, double))(h1 switch
{
< 1 => (chroma, x, 0),
< 2 => (x, chroma, 0),
< 3 => (0, chroma, x),
< 4 => (0, x, chroma),
< 5 => (x, 0, chroma),
_ => (chroma, 0, x),
});
byte r = (byte)(255 * (r1 + m));
byte g = (byte)(255 * (g1 + m));
byte b = (byte)(255 * (b1 + m));
byte a = (byte)(255 * hsla32.A);
return new Rgba32(r, g, b, a);
}
}

View File

@@ -3,9 +3,10 @@
using Microsoft.Graphics.Canvas.Effects;
using Microsoft.UI.Composition;
using Snap.Hutao.UI.Xaml.Control.Image;
using System.Numerics;
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Composition;
/// <summary>
/// 合成扩展

View File

@@ -0,0 +1,12 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.UI;
internal struct Hsla32
{
public double H;
public double S;
public double L;
public double A;
}

View File

@@ -0,0 +1,44 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using System.Buffers.Binary;
using Windows.UI;
namespace Snap.Hutao.UI;
[HighQuality]
internal struct Rgba32
{
public byte R;
public byte G;
public byte B;
public byte A;
public Rgba32(string hex)
: this(hex.Length == 6 ? Convert.ToUInt32($"{hex}FF", 16) : Convert.ToUInt32(hex, 16))
{
}
public unsafe Rgba32(uint xrgbaCode)
{
// uint layout: 0xRRGGBBAA is AABBGGRR
// AABBGGRR -> RRGGBBAA
fixed (Rgba32* pSelf = &this)
{
*(uint*)pSelf = BinaryPrimitives.ReverseEndianness(xrgbaCode);
}
}
public Rgba32(byte r, byte g, byte b, byte a)
{
R = r;
G = g;
B = b;
A = a;
}
public static unsafe implicit operator Color(Rgba32 rgba32)
{
return ColorHelper.ToColor(rgba32);
}
}

View File

@@ -3,7 +3,7 @@
// Some part of this file came from:
// https://github.com/xunkong/desktop/tree/main/src/Desktop/Desktop/Pages/CharacterInfoPage.xaml.cs
namespace Snap.Hutao.Control.Media;
namespace Snap.Hutao.UI;
internal struct Rgba64
{

View File

@@ -3,7 +3,7 @@
using Microsoft.UI.Xaml;
namespace Snap.Hutao.Control;
namespace Snap.Hutao.UI.Xaml;
/// <summary>
/// 绑定探针

View File

@@ -9,7 +9,7 @@ using Microsoft.UI.Xaml.Controls.Primitives;
using Snap.Hutao.UI.Input;
using System.Collections;
namespace Snap.Hutao.UI.Xaml.Control.Tokenizing;
namespace Snap.Hutao.UI.Xaml.Control.AutoSuggestBox;
[DependencyProperty("FilterCommand", typeof(ICommand))]
[DependencyProperty("FilterCommandParameter", typeof(object))]

View File

@@ -3,7 +3,7 @@
using Windows.UI;
namespace Snap.Hutao.UI.Xaml.Control.Tokenizing;
namespace Snap.Hutao.UI.Xaml.Control.AutoSuggestBox;
internal sealed class SearchToken
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.UI.Xaml.Control.Tokenizing;
namespace Snap.Hutao.UI.Xaml.Control.AutoSuggestBox;
internal enum SearchTokenKind
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control;
namespace Snap.Hutao.UI.Xaml.Control;
internal interface IScopedPageScopeReferenceTracker : IDisposable
{

View File

@@ -9,14 +9,13 @@ using Microsoft.UI.Xaml.Media.Imaging;
using Snap.Hutao.Core.Caching;
using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Core.IO.DataTransfer;
using Snap.Hutao.UI.Xaml;
using System.IO;
using System.Runtime.InteropServices;
using Windows.Graphics.Imaging;
using Windows.Media.Casting;
using Windows.Storage.Streams;
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Xaml.Control.Image;
[SuppressMessage("", "CA1001")]
[SuppressMessage("", "SH003")]
@@ -49,7 +48,6 @@ internal sealed partial class CachedImage : Microsoft.UI.Xaml.Controls.Control,
public CachedImage()
{
DefaultStyleKey = typeof(CachedImage);
DefaultStyleResourceUri = "ms-appx:///Control/Image/CachedImage.xaml".ToUri();
}
public bool IsInitialized { get; private set; }

View File

@@ -1,15 +1,15 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shcm="using:Snap.Hutao.Control.Markup">
<Style TargetType="shci:CachedImage">
xmlns:shuxci="using:Snap.Hutao.UI.Xaml.Control.Image"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup">
<Style TargetType="shuxci:CachedImage">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{ThemeResource ApplicationForegroundThemeBrush}"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="shci:CachedImage">
<ControlTemplate TargetType="shuxci:CachedImage">
<Grid
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
@@ -19,7 +19,7 @@
<MenuFlyout>
<MenuFlyoutItem IsEnabled="False" Text="{TemplateBinding SourceName}"/>
<MenuFlyoutItem IsEnabled="False" Text="{TemplateBinding CachedName}"/>
<MenuFlyoutItem Command="{Binding CopyToClipboardCommand, RelativeSource={RelativeSource TemplatedParent}}" Text="{shcm:ResourceString Name=UIXamlControlCachedImageCopyImage}"/>
<MenuFlyoutItem Command="{Binding CopyToClipboardCommand, RelativeSource={RelativeSource TemplatedParent}}" Text="{shuxm:ResourceString Name=UIXamlControlCachedImageCopyImage}"/>
</MenuFlyout>
</Grid.ContextFlyout>
<Image

View File

@@ -15,14 +15,14 @@ using System.Net.Http;
using System.Runtime.InteropServices;
using Windows.Foundation;
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Xaml.Control.Image;
/// <summary>
/// 合成图像控件
/// 为其他图像类控件提供基类
/// </summary>
[HighQuality]
[DependencyProperty("EnableLazyLoading", typeof(bool), true, nameof(OnSourceChanged))]
[DependencyProperty("EnableShowHideAnimation", typeof(bool), true)]
[DependencyProperty("Source", typeof(Uri), default!, nameof(OnSourceChanged))]
internal abstract partial class CompositionImage : Microsoft.UI.Xaml.Controls.Control
{
@@ -189,7 +189,7 @@ internal abstract partial class CompositionImage : Microsoft.UI.Xaml.Controls.Co
{
isShow = true;
if (EnableLazyLoading)
if (EnableShowHideAnimation)
{
await AnimationBuilder
.Create()
@@ -210,7 +210,7 @@ internal abstract partial class CompositionImage : Microsoft.UI.Xaml.Controls.Co
{
isShow = false;
if (EnableLazyLoading)
if (EnableShowHideAnimation)
{
await AnimationBuilder
.Create()

View File

@@ -5,8 +5,9 @@ using Microsoft.UI;
using Microsoft.UI.Composition;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
using Snap.Hutao.UI.Composition;
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Xaml.Control.Image;
/// <summary>
/// 渐变图像

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Xaml.Control.Image;
/// <summary>
/// 渐变方向

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Xaml.Control.Image;
/// <summary>
/// 渐变锚点

View File

@@ -6,10 +6,11 @@ using Microsoft.UI;
using Microsoft.UI.Composition;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
using Snap.Hutao.Control.Theme;
using Snap.Hutao.UI.Composition;
using Snap.Hutao.UI.Xaml.Control.Theme;
using Windows.Foundation;
namespace Snap.Hutao.Control.Image;
namespace Snap.Hutao.UI.Xaml.Control.Image;
/// <summary>
/// 支持单色的图像

View File

@@ -5,7 +5,7 @@ using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Service.Notification;
namespace Snap.Hutao.Control.Selector;
namespace Snap.Hutao.UI.Xaml.Control;
internal sealed class InfoBarTemplateSelector : DataTemplateSelector
{
@@ -22,4 +22,4 @@ internal sealed class InfoBarTemplateSelector : DataTemplateSelector
return ActionButtonDisabled;
}
}
}

View File

@@ -3,7 +3,7 @@
using System.Diagnostics;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
[DebuggerDisplay("Count = {Count}, Height = {Height}")]
internal class UniformStaggeredColumnLayout : List<UniformStaggeredItem>

View File

@@ -3,7 +3,7 @@
using Microsoft.UI.Xaml;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
internal sealed class UniformStaggeredItem
{

View File

@@ -3,11 +3,12 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.UI.Xaml.Control.Layout;
using System.Collections.Specialized;
using System.Runtime.InteropServices;
using Windows.Foundation;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
[DependencyProperty("MinItemWidth", typeof(double), 0D, nameof(OnMinItemWidthChanged))]
[DependencyProperty("MinColumnSpacing", typeof(double), 0D, nameof(OnSpacingChanged))]

View File

@@ -4,7 +4,7 @@
using Microsoft.UI.Xaml.Controls;
using System.Runtime.InteropServices;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
internal sealed class UniformStaggeredLayoutState
{
@@ -49,7 +49,7 @@ internal sealed class UniformStaggeredLayoutState
throw new IndexOutOfRangeException();
}
if (index <= (items.Count - 1))
if (index <= items.Count - 1)
{
return items[index];
}
@@ -83,7 +83,7 @@ internal sealed class UniformStaggeredLayoutState
}
averageHeight /= columnLayout.Count;
double estimatedHeight = (averageHeight * context.ItemCount) / columnLayout.Count;
double estimatedHeight = averageHeight * context.ItemCount / columnLayout.Count;
if (estimatedHeight > desiredHeight)
{
desiredHeight = estimatedHeight;
@@ -179,7 +179,7 @@ internal sealed class UniformStaggeredLayoutState
Span<UniformStaggeredItem> layoutSpan = CollectionsMarshal.AsSpan(layout);
for (int i = 0; i < layoutSpan.Length; i++)
{
if ((startIndex <= layoutSpan[i].Index) && (layoutSpan[i].Index <= endIndex))
if (startIndex <= layoutSpan[i].Index && layoutSpan[i].Index <= endIndex)
{
int numToRemove = layoutSpan.Length - i;
layout.RemoveRange(i, numToRemove);

View File

@@ -4,7 +4,7 @@
using Microsoft.UI.Xaml;
using Windows.Foundation;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
internal sealed class WrapItem
{

View File

@@ -3,10 +3,11 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.UI.Xaml.Control.Layout;
using System.Collections.Specialized;
using Windows.Foundation;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
[DependencyProperty("HorizontalSpacing", typeof(double), 0D, nameof(LayoutPropertyChanged))]
[DependencyProperty("VerticalSpacing", typeof(double), 0D, nameof(LayoutPropertyChanged))]

View File

@@ -5,7 +5,7 @@ using Microsoft.UI.Xaml.Controls;
using System.Runtime.InteropServices;
using Windows.Foundation;
namespace Snap.Hutao.Control.Layout;
namespace Snap.Hutao.UI.Xaml.Control.Layout;
internal sealed class WrapLayoutState
{
@@ -27,7 +27,7 @@ internal sealed class WrapLayoutState
{
ArgumentOutOfRangeException.ThrowIfNegative(index);
if (index <= (items.Count - 1))
if (index <= items.Count - 1)
{
return items[index];
}

View File

@@ -1,21 +1,21 @@
<cwc:Segmented
x:Class="Snap.Hutao.Control.Panel.PanelSelector"
x:Class="Snap.Hutao.UI.Xaml.Control.LayoutSwitch"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cwc="using:CommunityToolkit.WinUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
Style="{StaticResource DefaultSegmentedStyle}"
mc:Ignorable="d">
<cwc:SegmentedItem
Icon="{shcm:FontIcon Glyph={StaticResource FontIconContentBulletedList}}"
Icon="{shuxm:FontIcon Glyph={StaticResource FontIconContentBulletedList}}"
Tag="List"
ToolTipService.ToolTip="{shcm:ResourceString Name=ControlPanelPanelSelectorDropdownListName}"/>
ToolTipService.ToolTip="{shuxm:ResourceString Name=ControlPanelPanelSelectorDropdownListName}"/>
<cwc:SegmentedItem
Icon="{shcm:FontIcon Glyph={StaticResource FontIconContentGridView}}"
Icon="{shuxm:FontIcon Glyph={StaticResource FontIconContentGridView}}"
Tag="Grid"
ToolTipService.ToolTip="{shcm:ResourceString Name=ControlPanelPanelSelectorDropdownGridName}"/>
ToolTipService.ToolTip="{shuxm:ResourceString Name=ControlPanelPanelSelectorDropdownGridName}"/>
</cwc:Segmented>

View File

@@ -6,16 +6,12 @@ using Microsoft.UI.Xaml;
using Snap.Hutao.Core.Setting;
using System.Collections.Frozen;
namespace Snap.Hutao.Control.Panel;
namespace Snap.Hutao.UI.Xaml.Control;
/// <summary>
/// 面板选择器
/// </summary>
[HighQuality]
[DependencyProperty("Current", typeof(string), List)]
[DependencyProperty("LocalSettingKeySuffixForCurrent", typeof(string))]
[DependencyProperty("LocalSettingKeyExtraForCurrent", typeof(string), "")]
internal sealed partial class PanelSelector : Segmented
internal sealed partial class LayoutSwitch : Segmented
{
public const string List = nameof(List);
public const string Grid = nameof(Grid);
@@ -26,21 +22,15 @@ internal sealed partial class PanelSelector : Segmented
KeyValuePair.Create(1, Grid),
]);
private readonly RoutedEventHandler loadedEventHandler;
private readonly RoutedEventHandler unloadedEventHandler;
private readonly RoutedEventHandler loadedEventHandler = OnRootLoaded;
private readonly RoutedEventHandler unloadedEventHandler = OnRootUnload;
private readonly long selectedIndexChangedCallbackToken;
/// <summary>
/// 构造一个新的面板选择器
/// </summary>
public PanelSelector()
public LayoutSwitch()
{
InitializeComponent();
loadedEventHandler = OnRootLoaded;
Loaded += loadedEventHandler;
unloadedEventHandler = OnRootUnload;
Unloaded += unloadedEventHandler;
selectedIndexChangedCallbackToken = RegisterPropertyChangedCallback(SelectedIndexProperty, OnSelectedIndexChanged);
@@ -48,7 +38,7 @@ internal sealed partial class PanelSelector : Segmented
private static void OnSelectedIndexChanged(DependencyObject sender, DependencyProperty dp)
{
PanelSelector selector = (PanelSelector)sender;
LayoutSwitch selector = (LayoutSwitch)sender;
selector.Current = IndexTypeMap[(int)selector.GetValue(dp)];
if (!string.IsNullOrEmpty(selector.LocalSettingKeySuffixForCurrent))
@@ -59,7 +49,7 @@ internal sealed partial class PanelSelector : Segmented
private static void OnRootLoaded(object sender, RoutedEventArgs e)
{
PanelSelector selector = (PanelSelector)sender;
LayoutSwitch selector = (LayoutSwitch)sender;
if (string.IsNullOrEmpty(selector.LocalSettingKeySuffixForCurrent))
{
@@ -74,12 +64,12 @@ internal sealed partial class PanelSelector : Segmented
private static void OnRootUnload(object sender, RoutedEventArgs e)
{
PanelSelector selector = (PanelSelector)sender;
LayoutSwitch selector = (LayoutSwitch)sender;
selector.UnregisterPropertyChangedCallback(SelectedIndexProperty, selector.selectedIndexChangedCallbackToken);
selector.Unloaded -= selector.unloadedEventHandler;
}
private static string GetSettingKey(PanelSelector selector)
private static string GetSettingKey(LayoutSwitch selector)
{
return $"Control.PanelSelector.{selector.LocalSettingKeySuffixForCurrent}{selector.LocalSettingKeyExtraForCurrent}";
}

View File

@@ -3,12 +3,14 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Markup;
using Microsoft.UI.Xaml.Media.Animation;
namespace Snap.Hutao.Control;
namespace Snap.Hutao.UI.Xaml.Control;
[TemplateVisualState(Name = "LoadingIn", GroupName = "CommonStates")]
[TemplateVisualState(Name = "LoadingOut", GroupName = "CommonStates")]
[TemplatePart(Name = "ContentGrid", Type = typeof(FrameworkElement))]
[TemplatePart(Name = "LoadingOutStoryboard", Type = typeof(Storyboard))]
internal class Loading : Microsoft.UI.Xaml.Controls.ContentControl
{
public static readonly DependencyProperty IsLoadingProperty = DependencyProperty.Register(nameof(IsLoading), typeof(bool), typeof(Loading), new PropertyMetadata(default(bool), IsLoadingPropertyChanged));
@@ -18,7 +20,6 @@ internal class Loading : Microsoft.UI.Xaml.Controls.ContentControl
public Loading()
{
DefaultStyleKey = typeof(Loading);
DefaultStyleResourceUri = "ms-appx:///Control/Loading.xaml".ToUri();
}
public bool IsLoading
@@ -30,6 +31,11 @@ internal class Loading : Microsoft.UI.Xaml.Controls.ContentControl
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (GetTemplateChild("LoadingOutStoryboard") is Storyboard storyboard)
{
storyboard.Completed -= UnloadPresenter;
storyboard.Completed += UnloadPresenter;
}
Update();
}
@@ -42,11 +48,6 @@ internal class Loading : Microsoft.UI.Xaml.Controls.ContentControl
{
control.presenter ??= control.GetTemplateChild("ContentGrid") as FrameworkElement;
}
else if (control.presenter is not null)
{
XamlMarkupHelper.UnloadObject(control.presenter);
control.presenter = null;
}
control.Update();
}
@@ -55,4 +56,12 @@ internal class Loading : Microsoft.UI.Xaml.Controls.ContentControl
{
VisualStateManager.GoToState(this, IsLoading ? "LoadingIn" : "LoadingOut", true);
}
private void UnloadPresenter(object? sender, object? args)
{
if (presenter is not null)
{
XamlMarkupHelper.UnloadObject(presenter);
}
}
}

View File

@@ -1,18 +1,18 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shc="using:Snap.Hutao.Control">
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control">
<Style BasedOn="{StaticResource DefaultLoadingStyle}" TargetType="shc:Loading"/>
<Style BasedOn="{StaticResource DefaultLoadingStyle}" TargetType="shuxc:Loading"/>
<Style x:Key="DefaultLoadingStyle" TargetType="shc:Loading">
<Style x:Key="DefaultLoadingStyle" TargetType="shuxc:Loading">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="shc:Loading">
<ControlTemplate TargetType="shuxc:Loading">
<Border
x:Name="RootGrid"
Background="{TemplateBinding Background}"
@@ -55,7 +55,7 @@
</Storyboard>
</VisualState>
<VisualState x:Name="LoadingOut">
<Storyboard>
<Storyboard x:Name="LoadingOutStoryboard">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Opacity">
<EasingDoubleKeyFrame KeyTime="0:0:0" Value="1">
<EasingDoubleKeyFrame.EasingFunction>

View File

@@ -6,7 +6,7 @@ using System.Data;
using System.Runtime.InteropServices;
using Windows.Foundation;
namespace Snap.Hutao.Control.Panel;
namespace Snap.Hutao.UI.Xaml.Control.Panel;
[DependencyProperty("Spacing", typeof(double), default(double), nameof(OnSpacingChanged))]
internal partial class EqualPanel : Microsoft.UI.Xaml.Controls.Panel

View File

@@ -5,7 +5,7 @@ using Microsoft.UI.Xaml;
using System.Runtime.InteropServices;
using Windows.Foundation;
namespace Snap.Hutao.Control.Panel;
namespace Snap.Hutao.UI.Xaml.Control.Panel;
[DependencyProperty("MinItemWidth", typeof(double))]
[DependencyProperty("Spacing", typeof(double))]

View File

@@ -4,7 +4,7 @@
using Microsoft.UI.Xaml;
using Windows.Foundation;
namespace Snap.Hutao.Control.Panel;
namespace Snap.Hutao.UI.Xaml.Control.Panel;
[DependencyProperty("MinItemWidth", typeof(double))]
[DependencyProperty("ColumnSpacing", typeof(double))]

View File

@@ -9,7 +9,7 @@ using Snap.Hutao.Service.Navigation;
using Snap.Hutao.View.Helper;
using Snap.Hutao.ViewModel.Abstraction;
namespace Snap.Hutao.Control;
namespace Snap.Hutao.UI.Xaml.Control;
[HighQuality]
[SuppressMessage("", "CA1001")]

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control;
namespace Snap.Hutao.UI.Xaml.Control;
/// <summary>
/// By injecting into services, we take dvantage of the fact that

View File

@@ -5,7 +5,7 @@ using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Windows.Foundation;
namespace Snap.Hutao.Control;
namespace Snap.Hutao.UI.Xaml.Control;
[DependencyProperty("IsWidthRestricted", typeof(bool), true)]
[DependencyProperty("IsHeightRestricted", typeof(bool), true)]

View File

@@ -5,19 +5,15 @@ using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Documents;
using Microsoft.UI.Xaml.Media;
using Snap.Hutao.Control.Media;
using Snap.Hutao.Control.Text.Syntax.MiHoYo;
using Snap.Hutao.Control.Theme;
using Snap.Hutao.Metadata;
using Snap.Hutao.UI.Xaml;
using Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
using Snap.Hutao.UI.Xaml.Control.Theme;
using Windows.Foundation;
using Windows.UI;
using MUXCTextBlock = Microsoft.UI.Xaml.Controls.TextBlock;
namespace Snap.Hutao.Control.Text;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock;
/// <summary>
/// 专用于呈现描述文本的文本块
/// </summary>
[HighQuality]
[DependencyProperty("Description", typeof(string), "", nameof(OnDescriptionChanged))]
[DependencyProperty("TextStyle", typeof(Style), default(Style), nameof(OnTextStyleChanged))]
@@ -25,14 +21,11 @@ internal sealed partial class DescriptionTextBlock : ContentControl
{
private readonly TypedEventHandler<FrameworkElement, object> actualThemeChangedEventHandler;
/// <summary>
/// 构造一个新的呈现描述文本的文本块
/// </summary>
public DescriptionTextBlock()
{
this.DisableInteraction();
Content = new TextBlock()
Content = new MUXCTextBlock()
{
TextWrapping = TextWrapping.Wrap,
Style = TextStyle,
@@ -44,23 +37,23 @@ internal sealed partial class DescriptionTextBlock : ContentControl
private static void OnDescriptionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBlock textBlock = (TextBlock)((DescriptionTextBlock)d).Content;
MUXCTextBlock textBlock = (MUXCTextBlock)((DescriptionTextBlock)d).Content;
UpdateDescription(textBlock, MiHoYoSyntaxTree.Parse(SpecialNameHandler.Handle((string)e.NewValue)));
}
private static void OnTextStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBlock textBlock = (TextBlock)((DescriptionTextBlock)d).Content;
MUXCTextBlock textBlock = (MUXCTextBlock)((DescriptionTextBlock)d).Content;
textBlock.Style = (Style)e.NewValue;
}
private static void UpdateDescription(TextBlock textBlock, MiHoYoSyntaxTree syntaxTree)
private static void UpdateDescription(MUXCTextBlock textBlock, MiHoYoSyntaxTree syntaxTree)
{
textBlock.Inlines.Clear();
AppendNode(textBlock, textBlock.Inlines, syntaxTree.Root);
}
private static void AppendNode(TextBlock textBlock, InlineCollection inlines, MiHoYoSyntaxNode node)
private static void AppendNode(MUXCTextBlock textBlock, InlineCollection inlines, MiHoYoSyntaxNode node)
{
switch (node.Kind)
{
@@ -83,13 +76,13 @@ internal sealed partial class DescriptionTextBlock : ContentControl
}
}
private static void AppendPlainText(TextBlock textBlock, InlineCollection inlines, MiHoYoPlainTextSyntax plainText)
private static void AppendPlainText(MUXCTextBlock textBlock, InlineCollection inlines, MiHoYoPlainTextSyntax plainText)
{
// PlainText doesn't have children
inlines.Add(new Run { Text = plainText.Span.ToString() });
}
private static void AppendColorText(TextBlock textBlock, InlineCollection inlines, MiHoYoColorTextSyntax colorText)
private static void AppendColorText(MUXCTextBlock textBlock, InlineCollection inlines, MiHoYoColorTextSyntax colorText)
{
Rgba32 color = new(colorText.ColorSpan.ToString());
Color targetColor;
@@ -100,9 +93,9 @@ internal sealed partial class DescriptionTextBlock : ContentControl
else
{
// Make lighter in light mode
Hsla32 hsl = color.ToHsl();
Hsla32 hsl = ColorHelper.ToHsla32(color);
hsl.L *= 0.3;
targetColor = Rgba32.FromHsl(hsl);
targetColor = ColorHelper.ToRgba32(hsl);
}
if (colorText.Children.Count > 1)
@@ -127,7 +120,7 @@ internal sealed partial class DescriptionTextBlock : ContentControl
}
}
private static void AppendItalicText(TextBlock textBlock, InlineCollection inlines, MiHoYoItalicTextSyntax italicText)
private static void AppendItalicText(MUXCTextBlock textBlock, InlineCollection inlines, MiHoYoItalicTextSyntax italicText)
{
if (italicText.Children.Count > 1)
{
@@ -154,6 +147,6 @@ internal sealed partial class DescriptionTextBlock : ContentControl
private void OnActualThemeChanged(FrameworkElement sender, object args)
{
// Simply re-apply texts
UpdateDescription((TextBlock)Content, MiHoYoSyntaxTree.Parse(SpecialNameHandler.Handle(Description)));
UpdateDescription((MUXCTextBlock)Content, MiHoYoSyntaxTree.Parse(SpecialNameHandler.Handle(Description)));
}
}

View File

@@ -6,13 +6,12 @@ using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Documents;
using Microsoft.UI.Xaml.Media;
using Snap.Hutao.Control.Media;
using Snap.Hutao.Control.Theme;
using Snap.Hutao.UI.Xaml;
using Snap.Hutao.UI.Xaml.Control.Theme;
using Windows.Foundation;
using Windows.UI;
using MUXCTextBlock = Microsoft.UI.Xaml.Controls.TextBlock;
namespace Snap.Hutao.Control.Text;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock;
// TODO: change the parsing to syntax tree
[DependencyProperty("Description", typeof(string), "", nameof(OnDescriptionChanged))]
@@ -37,7 +36,7 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
{
this.DisableInteraction();
Content = new TextBlock()
Content = new MUXCTextBlock()
{
TextWrapping = TextWrapping.Wrap,
Style = TextStyle,
@@ -49,7 +48,7 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
private static void OnDescriptionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBlock textBlock = (TextBlock)((HtmlDescriptionTextBlock)d).Content;
MUXCTextBlock textBlock = (MUXCTextBlock)((HtmlDescriptionTextBlock)d).Content;
ReadOnlySpan<char> description = (string)e.NewValue;
UpdateDescription(textBlock, description);
@@ -57,11 +56,11 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
private static void OnTextStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBlock textBlock = (TextBlock)((HtmlDescriptionTextBlock)d).Content;
MUXCTextBlock textBlock = (MUXCTextBlock)((HtmlDescriptionTextBlock)d).Content;
textBlock.Style = (Style)e.NewValue;
}
private static void UpdateDescription(TextBlock textBlock, in ReadOnlySpan<char> description)
private static void UpdateDescription(MUXCTextBlock textBlock, in ReadOnlySpan<char> description)
{
textBlock.Inlines.Clear();
@@ -125,12 +124,12 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
}
}
private static void AppendText(TextBlock text, in ReadOnlySpan<char> slice)
private static void AppendText(MUXCTextBlock text, in ReadOnlySpan<char> slice)
{
text.Inlines.Add(new Run { Text = slice.ToString() });
}
private static void AppendColorText(TextBlock text, in ReadOnlySpan<char> slice, Rgba32 color)
private static void AppendColorText(MUXCTextBlock text, in ReadOnlySpan<char> slice, Rgba32 color)
{
Color targetColor;
if (ThemeHelper.IsDarkMode(text.ActualTheme))
@@ -140,9 +139,9 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
else
{
// Make lighter in light mode
Hsla32 hsl = color.ToHsl();
Hsla32 hsl = ColorHelper.ToHsla32(color);
hsl.L *= 0.3;
targetColor = Rgba32.FromHsl(hsl);
targetColor = ColorHelper.ToRgba32(hsl);
}
text.Inlines.Add(new Run
@@ -152,7 +151,7 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
});
}
private static void AppendBoldText(TextBlock text, in ReadOnlySpan<char> slice)
private static void AppendBoldText(MUXCTextBlock text, in ReadOnlySpan<char> slice)
{
text.Inlines.Add(new Run
{
@@ -161,7 +160,7 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
});
}
private static void AppendItalicText(TextBlock text, in ReadOnlySpan<char> slice)
private static void AppendItalicText(MUXCTextBlock text, in ReadOnlySpan<char> slice)
{
text.Inlines.Add(new Run
{
@@ -170,7 +169,7 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
});
}
private static void AppendLineBreak(TextBlock text)
private static void AppendLineBreak(MUXCTextBlock text)
{
text.Inlines.Add(new LineBreak());
}
@@ -178,6 +177,6 @@ internal sealed partial class HtmlDescriptionTextBlock : ContentControl
private void OnActualThemeChanged(FrameworkElement sender, object args)
{
// Simply re-apply texts
UpdateDescription((TextBlock)Content, Description);
UpdateDescription((MUXCTextBlock)Content, Description);
}
}

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal enum MiHoYoColorKind
{

View File

@@ -3,7 +3,7 @@
using Snap.Hutao.Core.ExceptionService;
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal sealed class MiHoYoColorTextSyntax : MiHoYoXmlElementSyntax
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal sealed class MiHoYoItalicTextSyntax : MiHoYoXmlElementSyntax
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal sealed class MiHoYoPlainTextSyntax : MiHoYoSyntaxNode
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal sealed class MiHoYoRootSyntax : MiHoYoSyntaxNode
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal enum MiHoYoSyntaxKind
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal abstract class MiHoYoSyntaxNode : SyntaxNode<MiHoYoSyntaxNode, MiHoYoSyntaxKind>
{

View File

@@ -3,7 +3,7 @@
using Snap.Hutao.Core.ExceptionService;
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
// TODO: Pooling syntax nodes to reduce memory allocation
internal sealed class MiHoYoSyntaxTree

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax.MiHoYo;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax.MiHoYo;
internal abstract class MiHoYoXmlElementSyntax : MiHoYoSyntaxNode
{

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Text.Syntax;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax;
internal abstract class SyntaxNode<TSelf, TKind>
where TSelf : SyntaxNode<TSelf, TKind>

View File

@@ -3,7 +3,7 @@
using System.Diagnostics;
namespace Snap.Hutao.Control.Text.Syntax;
namespace Snap.Hutao.UI.Xaml.Control.TextBlock.Syntax;
[DebuggerDisplay("[{Start}..{End}]")]
internal readonly struct TextPosition

View File

@@ -4,7 +4,7 @@
using Snap.Hutao.Win32;
using Windows.UI;
namespace Snap.Hutao.Control.Theme;
namespace Snap.Hutao.UI.Xaml.Control.Theme;
internal static class KnownColors
{

Some files were not shown because too many files have changed in this diff Show More