using AtomUI.Theme.Styling; using AtomUI.Theme.TokenSystem; using AtomUI.Utils; using Avalonia; using Avalonia.Media; namespace AtomUI.Controls; [ControlDesignToken] public class OptionButtonToken : AbstractControlDesignToken { public const string ID = "OptionButton"; /// /// 单选框按钮背景色 /// public Color ButtonBackground { get; set; } /// /// 单选框按钮选中背景色 /// public Color ButtonCheckedBackground { get; set; } /// /// 单选框按钮文本颜色 /// public Color ButtonColor { get; set; } /// /// 单选框按钮内间距 /// public Thickness ButtonPadding { get; set; } /// /// 单选框按钮选中并禁用时的背景色 /// public Color ButtonCheckedBgDisabled { get; set; } /// /// 单选框按钮选中并禁用时的文本颜色 /// public Color ButtonCheckedColorDisabled { get; set; } /// /// 单选框实色按钮选中时的文本颜色 /// public Color ButtonSolidCheckedColor { get; set; } /// /// 单选框实色按钮选中时的背景色 /// public Color ButtonSolidCheckedBackground { get; set; } /// /// 单选框实色按钮选中时的悬浮态背景色 /// public Color ButtonSolidCheckedHoverBackground { get; set; } /// /// 单选框实色按钮选中时的激活态背景色 /// public Color ButtonSolidCheckedActiveBackground { get; set; } /// /// 按钮内容字体大小 /// public double ContentFontSize { get; set; } = -1; /// /// 大号按钮内容字体大小 /// public double ContentFontSizeLG { get; set; } = -1; /// /// 小号按钮内容字体大小 /// public double ContentFontSizeSM { get; set; } = -1; /// /// 按钮内容字体行高 /// public double ContentLineHeight { get; set; } = -1; /// /// 大号按钮内容字体行高 /// public double ContentLineHeightLG { get; set; } = -1; /// /// 小号按钮内容字体行高 /// public double ContentLineHeightSM { get; set; } = -1; /// /// 按钮内间距 /// public Thickness Padding { get; set; } /// /// 大号按钮内间距 /// public Thickness PaddingLG { get; set; } /// /// 小号按钮内间距 /// public Thickness PaddingSM { get; set; } public OptionButtonToken() : base(ID) { } internal override void CalculateFromAlias() { base.CalculateFromAlias(); ButtonSolidCheckedColor = SharedToken.ColorTextLightSolid; ButtonSolidCheckedBackground = SharedToken.ColorPrimary; ButtonSolidCheckedHoverBackground = SharedToken.ColorPrimaryHover; ButtonSolidCheckedActiveBackground = SharedToken.ColorPrimaryActive; ButtonBackground = SharedToken.ColorBgContainer; ButtonCheckedBackground = SharedToken.ColorBgContainer; ButtonColor = SharedToken.ColorText; ButtonCheckedBgDisabled = SharedToken.ControlItemBgActiveDisabled; ButtonCheckedColorDisabled = SharedToken.ColorTextDisabled; ButtonPadding = new Thickness(SharedToken.Padding, 0); var fontSize = SharedToken.FontSize; var fontSizeLG = SharedToken.FontSizeLG; ContentFontSize = !MathUtils.AreClose(ContentFontSize, -1) ? ContentFontSize : fontSize; ContentFontSizeSM = !MathUtils.AreClose(ContentFontSizeSM, -1) ? ContentFontSizeSM : fontSize; ContentFontSizeLG = !MathUtils.AreClose(ContentFontSizeLG, -1) ? ContentFontSizeLG : fontSizeLG; ContentLineHeight = !MathUtils.AreClose(ContentLineHeight, -1) ? ContentLineHeight : CalculatorUtils.CalculateLineHeight(ContentFontSize); ContentLineHeightSM = !MathUtils.AreClose(ContentLineHeightSM, -1) ? ContentLineHeightSM : CalculatorUtils.CalculateLineHeight(ContentFontSizeSM); ContentLineHeightLG = !MathUtils.AreClose(ContentLineHeightLG, -1) ? ContentLineHeightLG : CalculatorUtils.CalculateLineHeight(ContentFontSizeLG); var controlHeight = SharedToken.ControlHeight; var controlHeightSM = SharedToken.ControlHeightSM; var controlHeightLG = SharedToken.ControlHeightLG; var lineWidth = SharedToken.LineWidth; Padding = new Thickness(SharedToken.PaddingContentHorizontal - lineWidth, Math.Max((controlHeight - ContentFontSize * ContentLineHeight) / 2 - lineWidth, 0)); PaddingLG = new Thickness(SharedToken.PaddingContentHorizontal - lineWidth, Math.Max((controlHeightSM - ContentFontSizeSM * ContentLineHeightSM) / 2 - lineWidth, 0)); PaddingSM = new Thickness(8 - SharedToken.LineWidth, Math.Max((controlHeightLG - controlHeightLG * controlHeightLG) / 2 - lineWidth, 0)); } }