mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-26 03:00:28 +08:00
Refactor Token
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
using System.Diagnostics;
|
||||
using AtomUI.Theme.Data;
|
||||
using AtomUI.Theme.TokenSystem;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Styling;
|
||||
|
||||
namespace AtomUI.Theme;
|
||||
|
||||
public class ControlTokenResourceRegister
|
||||
{
|
||||
private Control _target;
|
||||
private string _tokenId;
|
||||
private string? _resourceCatalog;
|
||||
private ResourceDictionary? _resourceDictionary;
|
||||
|
||||
public ControlTokenResourceRegister(Control target, string tokenId, string? resourceCatalog = null)
|
||||
{
|
||||
_target = target;
|
||||
_tokenId = tokenId;
|
||||
_resourceCatalog = resourceCatalog;
|
||||
}
|
||||
|
||||
public void RegisterResources()
|
||||
{
|
||||
if (_resourceDictionary != null)
|
||||
{
|
||||
_target.Resources.MergedDictionaries.Remove(_resourceDictionary);
|
||||
}
|
||||
|
||||
var controlToken = TokenFinderUtils.FindControlToken(_target, _tokenId, _resourceCatalog);
|
||||
Debug.Assert(controlToken != null);
|
||||
_resourceDictionary = new ResourceDictionary();
|
||||
foreach (var entry in controlToken.GetSharedResourceDeltaDictionary())
|
||||
{
|
||||
_resourceDictionary.Add(entry.Key, entry.Value);
|
||||
}
|
||||
|
||||
var themeVariant = TokenFinderUtils.FindThemeVariant(_target);
|
||||
_target.Resources.ThemeDictionaries.Add(themeVariant, _resourceDictionary);
|
||||
}
|
||||
|
||||
private IControlDesignToken? FindControlToken()
|
||||
{
|
||||
IControlDesignToken? token = null;
|
||||
var current = _target;
|
||||
while (current != null)
|
||||
{
|
||||
if (current is IThemeConfigProvider configProvider)
|
||||
{
|
||||
token = configProvider.GetControlToken(_tokenId, _resourceCatalog);
|
||||
if (token != null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
current = (current as IStyleHost).StylingParent as Control;
|
||||
}
|
||||
|
||||
return token;
|
||||
}
|
||||
}
|
||||
@@ -5,42 +5,42 @@ namespace AtomUI.Theme.TokenSystem;
|
||||
[GlobalDesignToken]
|
||||
public partial class DesignToken
|
||||
{
|
||||
/// <summary>
|
||||
/// 内容区域背景色(悬停)
|
||||
/// 控制内容区域背景色在鼠标悬停时的样式。
|
||||
/// </summary>
|
||||
public Color ColorFillContentHover { get; set; }
|
||||
/// <summary>
|
||||
/// 内容区域背景色(悬停)
|
||||
/// 控制内容区域背景色在鼠标悬停时的样式。
|
||||
/// </summary>
|
||||
public Color ColorFillContentHover { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 替代背景色
|
||||
/// 控制元素替代背景色。
|
||||
/// </summary>
|
||||
public Color ColorFillAlter { get; set; }
|
||||
/// <summary>
|
||||
/// 替代背景色
|
||||
/// 控制元素替代背景色。
|
||||
/// </summary>
|
||||
public Color ColorFillAlter { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 内容区域背景色
|
||||
/// 控制内容区域的背景色。
|
||||
/// </summary>
|
||||
public Color ColorFillContent { get; set; }
|
||||
/// <summary>
|
||||
/// 内容区域背景色
|
||||
/// 控制内容区域的背景色。
|
||||
/// </summary>
|
||||
public Color ColorFillContent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 容器禁用态下的背景色
|
||||
/// 控制容器在禁用状态下的背景色。
|
||||
/// </summary>
|
||||
public Color ColorBgContainerDisabled { get; set; }
|
||||
/// <summary>
|
||||
/// 容器禁用态下的背景色
|
||||
/// 控制容器在禁用状态下的背景色。
|
||||
/// </summary>
|
||||
public Color ColorBgContainerDisabled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 文本悬停态背景色
|
||||
/// 控制文本在悬停状态下的背景色。
|
||||
/// </summary>
|
||||
public Color ColorBgTextHover { get; set; }
|
||||
/// <summary>
|
||||
/// 文本悬停态背景色
|
||||
/// 控制文本在悬停状态下的背景色。
|
||||
/// </summary>
|
||||
public Color ColorBgTextHover { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 文本激活态背景色
|
||||
/// 控制文本在激活状态下的背景色。
|
||||
/// </summary>
|
||||
public Color ColorBgTextActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 文本激活态背景色
|
||||
/// 控制文本在激活状态下的背景色。
|
||||
/// </summary>
|
||||
public Color ColorBgTextActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 背景边框颜色
|
||||
/// 控制元素背景边框的颜色。
|
||||
@@ -52,7 +52,7 @@ public partial class DesignToken
|
||||
/// 用于作为分割线的颜色,此颜色和 colorBorderSecondary 的颜色一致,但是用的是透明色。
|
||||
/// </summary>
|
||||
public Color ColorSplit { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 占位文本颜色
|
||||
/// 控制占位文本的颜色。
|
||||
@@ -189,7 +189,7 @@ public partial class DesignToken
|
||||
/// 控制组件项在禁用状态下的激活背景颜色
|
||||
/// </summary>
|
||||
public Color ControlItemBgActiveDisabled { get; set; } // Note. It also is a color
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 线条宽度(聚焦态)
|
||||
/// </summary>
|
||||
@@ -290,7 +290,7 @@ public partial class DesignToken
|
||||
/// 控制内容元素垂直内间距,适用于小屏幕设备。
|
||||
/// </summary>
|
||||
public double PaddingContentVerticalSM { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 外边距 XXS
|
||||
/// 控制元素外边距,最小尺寸。
|
||||
|
||||
@@ -8,13 +8,12 @@ namespace AtomUI.Theme.TokenSystem;
|
||||
|
||||
public partial class DesignToken : AbstractDesignToken
|
||||
{
|
||||
/// <summary>
|
||||
/// <summary>
|
||||
/// 现在这里的实现是写死的主色,后面是不是可以读取配置
|
||||
/// </summary>
|
||||
private readonly IDictionary<PresetColorType, PresetPrimaryColor> _defaultPresetColors;
|
||||
|
||||
[NotTokenDefinition]
|
||||
public IDictionary<PresetPrimaryColor, ColorMap> ColorPalettes { get; set; }
|
||||
|
||||
[NotTokenDefinition] public IDictionary<PresetPrimaryColor, ColorMap> ColorPalettes { get; set; }
|
||||
|
||||
public DesignToken()
|
||||
{
|
||||
@@ -61,12 +60,12 @@ public partial class DesignToken : AbstractDesignToken
|
||||
BorderRadius = new CornerRadius(6);
|
||||
ColorTransparent = Colors.Transparent;
|
||||
}
|
||||
|
||||
|
||||
public PresetPrimaryColor GetPresetPrimaryColor(PresetColorType colorType)
|
||||
{
|
||||
return _defaultPresetColors[colorType];
|
||||
}
|
||||
|
||||
|
||||
public void SetColorPalette(PresetPrimaryColor primaryColor, ColorMap colorMap)
|
||||
{
|
||||
ColorPalettes[primaryColor] = colorMap;
|
||||
@@ -91,27 +90,18 @@ public partial class DesignToken : AbstractDesignToken
|
||||
var screenLG = 992;
|
||||
var screenXL = 1200;
|
||||
var screenXXL = 1600;
|
||||
|
||||
// Motion
|
||||
if (!EnableMotion)
|
||||
{
|
||||
MotionDurationFast = TimeSpan.FromMilliseconds(0);
|
||||
MotionDurationMid = TimeSpan.FromMilliseconds(0);
|
||||
MotionDurationSlow = TimeSpan.FromMilliseconds(0);
|
||||
MotionDurationVerySlow = TimeSpan.FromMilliseconds(0);
|
||||
}
|
||||
|
||||
|
||||
// setup alias token
|
||||
// ============== Background ============== //
|
||||
ColorFillContent = ColorFillSecondary;
|
||||
ColorFillContentHover = ColorFill;
|
||||
ColorFillAlter = ColorFillQuaternary;
|
||||
ColorBgContainerDisabled = ColorFillTertiary;
|
||||
|
||||
|
||||
// ============== Split ============== //
|
||||
ColorBorderBg = ColorBgContainer;
|
||||
ColorSplit = ColorUtils.AlphaColor(ColorBorderSecondary, ColorBgContainer);
|
||||
|
||||
|
||||
// ============== Text ============== //
|
||||
ColorTextPlaceholder = ColorTextQuaternary;
|
||||
ColorTextDisabled = ColorTextQuaternary;
|
||||
@@ -122,48 +112,48 @@ public partial class DesignToken : AbstractDesignToken
|
||||
ColorHighlight = ColorError;
|
||||
ColorBgTextHover = ColorFillSecondary;
|
||||
ColorBgTextActive = ColorFill;
|
||||
|
||||
|
||||
ColorIcon = ColorTextTertiary;
|
||||
ColorIconHover = ColorText;
|
||||
|
||||
|
||||
ColorErrorOutline = ColorUtils.AlphaColor(ColorErrorBg, ColorBgContainer);
|
||||
ColorWarningOutline = ColorUtils.AlphaColor(ColorWarningBg, ColorBgContainer);
|
||||
|
||||
|
||||
// Font
|
||||
FontSizeIcon = FontSizeSM;
|
||||
|
||||
|
||||
// icon
|
||||
IconSizeXS = (int)FontSizeSM - 2;
|
||||
IconSizeSM = (int)FontSizeSM;
|
||||
IconSize = (int)FontSize;
|
||||
IconSizeLG = (int)FontSizeLG;
|
||||
|
||||
|
||||
// Line
|
||||
LineWidthFocus = LineWidth * 2;
|
||||
WaveAnimationRange = LineWidth * 6;
|
||||
WaveStartOpacity = 0.4;
|
||||
|
||||
|
||||
// Control
|
||||
ControlOutlineWidth = LineWidth * 2;
|
||||
|
||||
|
||||
// Checkbox size and expand icon size
|
||||
ControlInteractiveSize = ControlHeight / 2;
|
||||
|
||||
|
||||
ControlItemBgHover = ColorFillTertiary;
|
||||
ControlItemBgActive = ColorPrimaryBg;
|
||||
ControlItemBgActiveHover = ColorPrimaryBgHover;
|
||||
ControlItemBgActiveDisabled = ColorFill;
|
||||
ColorControlOutline = ColorUtils.AlphaColor(ColorPrimaryBg, ColorBgContainer);
|
||||
|
||||
|
||||
FontWeightStrong = 600;
|
||||
OpacityLoading = 0.65;
|
||||
LinkDecoration = null;
|
||||
LinkHoverDecoration = null;
|
||||
LinkFocusDecoration = null;
|
||||
|
||||
|
||||
ControlPadding = 12;
|
||||
ControlPaddingSM = 8;
|
||||
|
||||
|
||||
PaddingXXS = SizeXXS;
|
||||
PaddingXS = SizeXS;
|
||||
PaddingSM = SizeSM;
|
||||
@@ -171,7 +161,7 @@ public partial class DesignToken : AbstractDesignToken
|
||||
PaddingMD = SizeMD;
|
||||
PaddingLG = SizeLG;
|
||||
PaddingXL = SizeXL;
|
||||
|
||||
|
||||
PaddingContentHorizontalLG = SizeLG;
|
||||
PaddingContentVerticalLG = SizeMS;
|
||||
PaddingContentHorizontal = SizeMS;
|
||||
@@ -179,7 +169,7 @@ public partial class DesignToken : AbstractDesignToken
|
||||
PaddingContentHorizontalSM = SizeSM;
|
||||
PaddingContentHorizontalXS = SizeXS;
|
||||
PaddingContentVerticalSM = SizeXS;
|
||||
|
||||
|
||||
MarginXXS = SizeXXS;
|
||||
MarginXS = SizeXS;
|
||||
MarginSM = SizeSM;
|
||||
@@ -188,7 +178,7 @@ public partial class DesignToken : AbstractDesignToken
|
||||
MarginLG = SizeLG;
|
||||
MarginXL = SizeXL;
|
||||
MarginXXL = SizeXXL;
|
||||
|
||||
|
||||
ScreenXS = screenXS;
|
||||
ScreenXSMin = screenXS;
|
||||
ScreenXSMax = screenSM - 1;
|
||||
@@ -206,7 +196,7 @@ public partial class DesignToken : AbstractDesignToken
|
||||
ScreenXLMax = screenXXL - 1;
|
||||
ScreenXXL = screenXXL;
|
||||
ScreenXXLMin = screenXXL;
|
||||
|
||||
|
||||
BoxShadows = new BoxShadows(new BoxShadow
|
||||
{
|
||||
OffsetX = 0,
|
||||
@@ -233,7 +223,7 @@ public partial class DesignToken : AbstractDesignToken
|
||||
Color = ColorUtils.FromRgbF(0.05, 0, 0, 0)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
BoxShadowsSecondary = new BoxShadows(new BoxShadow
|
||||
{
|
||||
OffsetX = 0,
|
||||
@@ -260,7 +250,7 @@ public partial class DesignToken : AbstractDesignToken
|
||||
Color = ColorUtils.FromRgbF(0.07, 0, 0, 0)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
BoxShadowsTertiary = new BoxShadows(new BoxShadow
|
||||
{
|
||||
OffsetX = 0,
|
||||
|
||||
Reference in New Issue
Block a user