using System; using UnityEngine; #if dUI_TextMeshPro using TMPro; #endif namespace XCharts.Runtime { /// /// Settings related to text. /// |文本的相关设置。 /// [Serializable] public class TextStyle : ChildComponent { [SerializeField] private bool m_Show = true; [SerializeField] private Font m_Font; [SerializeField] private bool m_AutoWrap = false; [SerializeField] private bool m_AutoAlign = true; [SerializeField] private float m_Rotate = 0; [SerializeField] private bool m_AutoColor = false; [SerializeField] private Color m_Color = Color.clear; [SerializeField] private int m_FontSize = 0; [SerializeField] private FontStyle m_FontStyle = FontStyle.Normal; [SerializeField] private float m_LineSpacing = 1f; [SerializeField] private TextAnchor m_Alignment = TextAnchor.MiddleCenter; #if dUI_TextMeshPro [SerializeField] private TMP_FontAsset m_TMPFont; [SerializeField] private FontStyles m_TMPFontStyle = FontStyles.Normal; [SerializeField] private TextAlignmentOptions m_TMPAlignment = TextAlignmentOptions.Left; #endif public bool show { get { return m_Show; } set { if (PropertyUtil.SetStruct(ref m_Show, value)) SetComponentDirty(); } } /// /// Rotation of text. /// |文本的旋转。 /// [default: `0f`] /// public float rotate { get { return m_Rotate; } set { if (PropertyUtil.SetStruct(ref m_Rotate, value)) SetComponentDirty(); } } /// /// 是否开启自动颜色。当开启时,会自动设置颜色。 /// public bool autoColor { get { return m_AutoColor; } set { if (PropertyUtil.SetStruct(ref m_AutoColor, value)) SetAllDirty(); } } /// /// the color of text. /// |文本的颜色。 /// [default: `Color.clear`] /// public Color color { get { return m_Color; } set { if (PropertyUtil.SetColor(ref m_Color, value)) SetComponentDirty(); } } /// /// the font of text. When `null`, the theme's font is used by default. /// |文本字体。 /// [default: null] /// public Font font { get { return m_Font; } set { if (PropertyUtil.SetClass(ref m_Font, value)) SetComponentDirty(); } } /// /// font size. /// |文本字体大小。 /// [default: 18] /// public int fontSize { get { return m_FontSize; } set { if (PropertyUtil.SetStruct(ref m_FontSize, value)) SetComponentDirty(); } } /// /// font style. /// |文本字体的风格。 /// [default: FontStyle.Normal] /// public FontStyle fontStyle { get { return m_FontStyle; } set { if (PropertyUtil.SetStruct(ref m_FontStyle, value)) SetComponentDirty(); } } /// /// text line spacing. /// |行间距。 /// [default: 1f] /// public float lineSpacing { get { return m_LineSpacing; } set { if (PropertyUtil.SetStruct(ref m_LineSpacing, value)) SetComponentDirty(); } } /// /// 是否自动换行。 /// public bool autoWrap { get { return m_AutoWrap; } set { if (PropertyUtil.SetStruct(ref m_AutoWrap, value)) SetComponentDirty(); } } /// /// 文本是否让系统自动选对齐方式。为false时才会用alignment。 /// public bool autoAlign { get { return m_AutoAlign; } set { if (PropertyUtil.SetStruct(ref m_AutoAlign, value)) SetComponentDirty(); } } /// /// 对齐方式。 /// public TextAnchor alignment { get { return m_Alignment; } set { if (PropertyUtil.SetStruct(ref m_Alignment, value)) SetComponentDirty(); } } #if dUI_TextMeshPro /// /// the font of textmeshpro. /// |TextMeshPro字体。 /// public TMP_FontAsset tmpFont { get { return m_TMPFont; } set { if (PropertyUtil.SetClass(ref m_TMPFont, value)) SetComponentDirty(); } } /// /// the font style of TextMeshPro. /// |TextMeshPro字体类型。 /// public FontStyles tmpFontStyle { get { return m_TMPFontStyle; } set { if (PropertyUtil.SetStruct(ref m_TMPFontStyle, value)) SetComponentDirty(); } } /// /// the text alignment of TextMeshPro. /// |TextMeshPro字体对齐方式。 /// public TextAlignmentOptions tmpFontStyle { get { return m_TMPAlignment; } set { if (PropertyUtil.SetStruct(ref m_TMPAlignment, value)) SetComponentDirty(); } } #endif public TextStyle() { } public TextStyle(int fontSize) { this.fontSize = fontSize; } public TextStyle(int fontSize, FontStyle fontStyle) { this.fontSize = fontSize; this.fontStyle = fontStyle; } public TextStyle(int fontSize, FontStyle fontStyle, Color color) { this.fontSize = fontSize; this.fontStyle = fontStyle; this.color = color; } public TextStyle(int fontSize, FontStyle fontStyle, Color color, int rorate) { this.fontSize = fontSize; this.fontStyle = fontStyle; this.color = color; this.rotate = rotate; } public void Copy(TextStyle textStyle) { font = textStyle.font; rotate = textStyle.rotate; color = textStyle.color; fontSize = textStyle.fontSize; fontStyle = textStyle.fontStyle; lineSpacing = textStyle.lineSpacing; alignment = textStyle.alignment; autoWrap = textStyle.autoWrap; autoAlign = textStyle.autoAlign; #if dUI_TextMeshPro m_TMPFont = textStyle.tmpFont; m_TMPFontStyle = textStyle.tmpFontStyle; #endif } public void UpdateAlignmentByLocation(Location location) { #if dUI_TextMeshPro m_TMPAlignment = location.runtimeTMPTextAlignment; #else m_Alignment = location.runtimeTextAlignment; #endif } public Color GetColor(Color defaultColor) { if (ChartHelper.IsClearColor(color)) return defaultColor; else return color; } public int GetFontSize(ComponentTheme defaultTheme) { if (fontSize == 0) return defaultTheme.fontSize; else return fontSize; } public TextAnchor GetAlignment(TextAnchor defaultAlignment) { return m_AutoAlign ? defaultAlignment : alignment; } } }