UIComponent.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace XCharts.Runtime
  5. {
  6. /// <summary>
  7. /// UI组件基类。
  8. /// </summary>
  9. [ExecuteInEditMode]
  10. [RequireComponent(typeof(RectTransform))]
  11. [DisallowMultipleComponent]
  12. public class UIComponent : BaseGraph
  13. {
  14. [SerializeField] private bool m_DebugModel = false;
  15. [SerializeField] protected UIComponentTheme m_Theme = new UIComponentTheme();
  16. [SerializeField] private Background m_Background = new Background() { show = true };
  17. protected bool m_DataDirty;
  18. private ThemeType m_CheckTheme = 0;
  19. public override HideFlags chartHideFlags { get { return m_DebugModel ? HideFlags.None : HideFlags.HideInHierarchy; } }
  20. public UIComponentTheme theme { get { return m_Theme; } set { m_Theme = value; } }
  21. /// <summary>
  22. /// 背景样式。
  23. /// </summary>
  24. public Background background { get { return m_Background; } set { m_Background = value; color = Color.white; } }
  25. /// <summary>
  26. /// Update chart theme.
  27. /// ||切换内置主题。
  28. /// </summary>
  29. /// <param name="theme">theme</param>
  30. public bool UpdateTheme(ThemeType theme)
  31. {
  32. if (theme == ThemeType.Custom)
  33. {
  34. Debug.LogError("UpdateTheme: not support switch to Custom theme.");
  35. return false;
  36. }
  37. if (m_Theme.sharedTheme == null)
  38. m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
  39. m_Theme.sharedTheme.CopyTheme(theme);
  40. m_Theme.SetAllDirty();
  41. return true;
  42. }
  43. [Since("v3.9.0")]
  44. public void SetDataDirty()
  45. {
  46. m_DataDirty = true;
  47. m_RefreshChart = true;
  48. }
  49. public override void SetAllDirty()
  50. {
  51. base.SetAllDirty();
  52. SetDataDirty();
  53. }
  54. public override void SetVerticesDirty()
  55. {
  56. base.SetVerticesDirty();
  57. m_RefreshChart = true;
  58. }
  59. protected override void InitComponent()
  60. {
  61. base.InitComponent();
  62. if (m_Theme.sharedTheme == null)
  63. m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
  64. UIHelper.InitBackground(this);
  65. }
  66. protected override void CheckComponent()
  67. {
  68. base.CheckComponent();
  69. if (m_Theme.anyDirty)
  70. {
  71. if (m_Theme.componentDirty)
  72. {
  73. SetAllComponentDirty();
  74. }
  75. if (m_Theme.vertsDirty) RefreshGraph();
  76. m_Theme.ClearDirty();
  77. }
  78. }
  79. protected override void SetAllComponentDirty()
  80. {
  81. base.SetAllComponentDirty();
  82. InitComponent();
  83. }
  84. protected override void OnDrawPainterBase(VertexHelper vh, Painter painter)
  85. {
  86. vh.Clear();
  87. UIHelper.DrawBackground(vh, this);
  88. }
  89. protected override void Awake()
  90. {
  91. CheckTheme(true);
  92. base.Awake();
  93. }
  94. protected override void Update()
  95. {
  96. base.Update();
  97. if (m_DataDirty)
  98. {
  99. m_DataDirty = false;
  100. DataDirty();
  101. }
  102. }
  103. #if UNITY_EDITOR
  104. protected override void Reset()
  105. {
  106. base.Reset();
  107. Awake();
  108. }
  109. protected override void OnValidate()
  110. {
  111. base.OnValidate();
  112. }
  113. #endif
  114. protected virtual void DataDirty()
  115. {
  116. }
  117. protected virtual void CheckTheme(bool firstInit = false)
  118. {
  119. if (m_Theme.sharedTheme == null)
  120. {
  121. m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
  122. }
  123. if (firstInit)
  124. {
  125. m_CheckTheme = m_Theme.themeType;
  126. }
  127. if (m_Theme.sharedTheme != null && m_CheckTheme != m_Theme.themeType)
  128. {
  129. m_CheckTheme = m_Theme.themeType;
  130. m_Theme.sharedTheme.CopyTheme(m_CheckTheme);
  131. #if UNITY_EDITOR
  132. UnityEditor.EditorUtility.SetDirty(this);
  133. #endif
  134. SetAllDirty();
  135. SetAllComponentDirty();
  136. OnThemeChanged();
  137. }
  138. }
  139. protected virtual void OnThemeChanged() { }
  140. }
  141. }