163 lines
8.4 KiB
C#
163 lines
8.4 KiB
C#
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
|
||
}
|
||
}
|