using Avalonia;
namespace LanMountainDesktop.PluginSdk;
///
/// 插件外观辅助方法,提供统一的圆角和主题资源访问。
///
public static class PluginAppearanceHelper
{
///
/// 获取桌面组件主外壳圆角半径。
/// 这是组件最外层边框应该使用的圆角值,对应 DesignCornerRadiusComponent 资源。
///
/// 外观上下文
/// 主外壳圆角半径(像素)
public static double GetShellCornerRadius(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.ResolveCornerRadius(PluginCornerRadiusPreset.Component);
}
///
/// 获取内部卡片圆角半径。
/// 用于组件内部的次级卡片、内容区块等。
///
/// 外观上下文
/// 内部卡片圆角半径(像素)
public static double GetCardCornerRadius(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.ResolveCornerRadius(PluginCornerRadiusPreset.Sm);
}
///
/// 获取控件圆角半径。
/// 用于按钮、输入框、标签等交互控件。
///
/// 外观上下文
/// 控件圆角半径(像素)
public static double GetControlCornerRadius(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.ResolveCornerRadius(PluginCornerRadiusPreset.Xs);
}
///
/// 获取徽章/标签圆角半径。
/// 用于小徽章、标签、角标等微元素。
///
/// 外观上下文
/// 徽章圆角半径(像素)
public static double GetBadgeCornerRadius(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.ResolveCornerRadius(PluginCornerRadiusPreset.Micro);
}
///
/// 获取中等面板圆角半径。
/// 用于悬浮菜单、小提示框、子面板等。
///
/// 外观上下文
/// 中等面板圆角半径(像素)
public static double GetMediumPanelCornerRadius(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.ResolveCornerRadius(PluginCornerRadiusPreset.Md);
}
///
/// 获取大面板圆角半径。
/// 用于对话框、设置面板等大型容器(非桌面组件)。
///
/// 外观上下文
/// 大面板圆角半径(像素)
public static double GetLargePanelCornerRadius(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.ResolveCornerRadius(PluginCornerRadiusPreset.Lg);
}
///
/// 将圆角预设转换为 Avalonia CornerRadius。
///
/// 外观上下文
/// 圆角预设
/// Avalonia CornerRadius 结构
public static CornerRadius ToCornerRadius(this IPluginAppearanceContext context, PluginCornerRadiusPreset preset)
{
ArgumentNullException.ThrowIfNull(context);
var radius = context.ResolveCornerRadius(preset);
return new CornerRadius(radius);
}
///
/// 获取当前主题变体(亮色/暗色)。
///
/// 外观上下文
/// 是否为暗色主题
public static bool IsDarkTheme(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return string.Equals(context.Snapshot.ThemeVariant, "Dark", StringComparison.OrdinalIgnoreCase);
}
///
/// 获取当前主题变体字符串。
///
/// 外观上下文
/// 主题变体字符串("Light" 或 "Dark")
public static string GetThemeVariant(this IPluginAppearanceContext context)
{
ArgumentNullException.ThrowIfNull(context);
return context.Snapshot.ThemeVariant;
}
}
///
/// 内部元素层级,用于区分不同层级的圆角需求。
///
public enum InnerElementLevel
{
///
/// 内部卡片:使用 Sm token(14px @ 1.0x)
///
Card,
///
/// 交互控件:使用 Xs token(12px @ 1.0x)
///
Control,
///
/// 微元素徽章:使用 Micro token(6px @ 1.0x)
///
Badge
}