Files
XericUIActionVessel/Runtime/XTable/Rendering/Component/XericUIActionTable.StyleParams.cs
T

163 lines
8.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using TMPro;
using UnityEngine;
using XericLibrary.Runtime.SuperStyleSheet;
namespace XericUI.XTable.Rendering.Component
{
/// <summary>
/// 表格样式参数——统一管理所有样式路径、回退值、样式取值方法与默认命名空间初始化。
/// </summary>
public partial class XericUIActionTable
{
#region 样式路径常量
public const string STYLE_CELL_BG_COLOR = "/cell/bg/color";
public const string STYLE_CELL_FG_COLOR = "/cell/fg/color";
public const string STYLE_CELL_SELECTION_BG_COLOR = "/cell/selection/bg/color";
public const string STYLE_CELL_BORDER_TOP_COLOR = "/cell/border/top/color";
public const string STYLE_CELL_BORDER_TOP_WIDTH = "/cell/border/top/width";
public const string STYLE_CELL_BORDER_BOTTOM_COLOR = "/cell/border/bottom/color";
public const string STYLE_CELL_BORDER_BOTTOM_WIDTH = "/cell/border/bottom/width";
public const string STYLE_CELL_BORDER_LEFT_COLOR = "/cell/border/left/color";
public const string STYLE_CELL_BORDER_LEFT_WIDTH = "/cell/border/left/width";
public const string STYLE_CELL_BORDER_RIGHT_COLOR = "/cell/border/right/color";
public const string STYLE_CELL_BORDER_RIGHT_WIDTH = "/cell/border/right/width";
public const string STYLE_CELL_FONT_SIZE = "/cell/font/size";
public const string STYLE_CELL_FONT_ALIGNMENT = "/cell/font/alignment";
public const string STYLE_CELL_FONT_RICH_TEXT = "/cell/font/richText";
public const string STYLE_CELL_FONT_ASSET = "/cell/font/fontAsset";
public const string STYLE_CELL_DEFAULT_HEIGHT = "/cell/default/height";
public const string STYLE_CELL_DEFAULT_WIDTH = "/cell/default/width";
#endregion
#region 回退值(GetStyleColor/GetStyleFloat/GetStyleInt 兜底参数)
public static readonly Color BG_COLOR_FALLBACK = new Color(0.18f, 0.18f, 0.18f, 1f);
public static readonly Color FG_COLOR_FALLBACK = new Color(0.05f, 0.05f, 0.05f);
public static readonly Color SELECTION_COLOR_FALLBACK = new Color(0.2f, 0.5f, 1f, 0.3f);
public static readonly Color BORDER_COLOR_FALLBACK = new Color(0.35f, 0.35f, 0.35f, 0.5f);
public static readonly float BORDER_WIDTH_FALLBACK = 1f;
public static readonly int FONT_SIZE_FALLBACK = 14;
#endregion
#region 动态默认值(EnsureDefaultStyleNamespace 中 AddDynamicStyle 的初始值,匹配 DefaultTableStyles.xsss)
public static readonly Color DEFAULT_BG_COLOR = Color.white;
public static readonly Color DEFAULT_FG_COLOR = new Color(0.1f, 0.1f, 0.1f);
public static readonly Color DEFAULT_BORDER_COLOR = new Color(0.8f, 0.8f, 0.8f);
public static readonly float DEFAULT_BORDER_WIDTH = 1f;
public static readonly Color DEFAULT_SELECTION_COLOR = new Color(0.2f, 0.5f, 1f, 0.3f);
public static readonly int DEFAULT_FONT_SIZE = 14;
public const string DEFAULT_FONT_ALIGNMENT = "MiddleCenter";
public const bool DEFAULT_FONT_RICH_TEXT = true;
public const float DEFAULT_CELL_HEIGHT = 40f;
public const float DEFAULT_CELL_WIDTH = 100f;
#endregion
#region 运行时硬编码色值
public static readonly Color RT_SELECTION_COLOR = new Color(0.18f, 0.42f, 0.82f, 0.25f);
public static readonly Color RT_MULTI_SELECT_COLOR = new Color(0.18f, 0.42f, 0.82f, 0.12f);
public static readonly Color RT_FOCUS_COLOR = new Color(0.22f, 0.55f, 0.95f, 0.35f);
public static readonly Color RT_BORDER_COLOR = new Color(0.35f, 0.35f, 0.35f, 0.5f);
public const float RT_BORDER_WIDTH = 1f;
#endregion
#region 便捷取值方法(封装路径 + 回退值)
private Color GetCellBgColor(string ns) =>
GetStyleColor(ns, STYLE_CELL_BG_COLOR, BG_COLOR_FALLBACK);
private Color GetCellFgColor(string ns) =>
GetStyleColor(ns, STYLE_CELL_FG_COLOR, FG_COLOR_FALLBACK);
private Color GetCellSelectionBgColor(string ns) =>
GetStyleColor(ns, STYLE_CELL_SELECTION_BG_COLOR, SELECTION_COLOR_FALLBACK);
private Color GetCellBorderColor(string ns) =>
GetStyleColor(ns, STYLE_CELL_BORDER_BOTTOM_COLOR, BORDER_COLOR_FALLBACK);
private float GetCellBorderWidth(string ns) =>
GetStyleFloat(ns, STYLE_CELL_BORDER_BOTTOM_WIDTH, BORDER_WIDTH_FALLBACK);
private int GetCellFontSize(string ns) =>
GetStyleInt(ns, STYLE_CELL_FONT_SIZE, FONT_SIZE_FALLBACK);
private TMP_FontAsset GetCellFontAsset(string ns) =>
GetStyleFontAsset(ns, STYLE_CELL_FONT_ASSET);
#endregion
#region 底层样式查询方法
private Color GetStyleColor(string ns, string path, Color fallback)
{
StyleValue val = StyleManager.GetValue(ns, path);
return val != null ? (Color)val : fallback;
}
private int GetStyleInt(string ns, string path, int fallback)
{
StyleValue val = StyleManager.GetValue(ns, path);
return val != null ? (int)val : fallback;
}
private float GetStyleFloat(string ns, string path, float fallback)
{
StyleValue val = StyleManager.GetValue(ns, path);
return val != null ? (float)val : fallback;
}
private TMP_FontAsset GetStyleFontAsset(string ns, string path, TMP_FontAsset fallback = null)
{
StyleValue val = StyleManager.GetValue(ns, path);
if (val == null) return fallback;
try { return val.GetValueAs<TMP_FontAsset>(); }
catch { return fallback; }
}
#endregion
#region 默认样式命名空间初始化
private void EnsureDefaultStyleNamespace()
{
// 检查命名空间是否已存在,避免 HasStyle → GetValue 对不存在的命名空间报错
bool nsExists = StyleManager.GetAvailableNamespaces()?.Contains(m_DefaultStyleNamespace) == true;
// 命名空间已存在且样式已加载(来自 .xsss),无需添加回退值
if (nsExists && StyleManager.HasStyle(m_DefaultStyleNamespace, STYLE_CELL_BG_COLOR))
return;
// 回退默认值匹配 DefaultTableStyles.xsss
// AddDynamicStyle 自动创建命名空间(如果尚不存在)
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BG_COLOR, DEFAULT_BG_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_FG_COLOR, DEFAULT_FG_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_TOP_COLOR, DEFAULT_BORDER_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_TOP_WIDTH, DEFAULT_BORDER_WIDTH);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_BOTTOM_COLOR, DEFAULT_BORDER_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_BOTTOM_WIDTH, DEFAULT_BORDER_WIDTH);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_LEFT_COLOR, DEFAULT_BORDER_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_LEFT_WIDTH, DEFAULT_BORDER_WIDTH);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_RIGHT_COLOR, DEFAULT_BORDER_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_BORDER_RIGHT_WIDTH, DEFAULT_BORDER_WIDTH);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_SELECTION_BG_COLOR, DEFAULT_SELECTION_COLOR);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_FONT_SIZE, DEFAULT_FONT_SIZE);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_FONT_ALIGNMENT, DEFAULT_FONT_ALIGNMENT);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_FONT_RICH_TEXT, DEFAULT_FONT_RICH_TEXT);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_DEFAULT_HEIGHT, DEFAULT_CELL_HEIGHT);
StyleManager.AddDynamicStyle(m_DefaultStyleNamespace, STYLE_CELL_DEFAULT_WIDTH, DEFAULT_CELL_WIDTH);
StyleManager.ForceRefresh();
}
#endregion
}
}