123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using System;
- using UnityEngine;
- using UnityEngine.UI;
- namespace XCharts.Runtime
- {
- /// <summary>
- /// UI组件基类。
- /// </summary>
- [ExecuteInEditMode]
- [RequireComponent(typeof(RectTransform))]
- [DisallowMultipleComponent]
- public class UIComponent : BaseGraph
- {
- [SerializeField] private bool m_DebugModel = false;
- [SerializeField] protected UIComponentTheme m_Theme = new UIComponentTheme();
- [SerializeField] private Background m_Background = new Background() { show = true };
- protected bool m_DataDirty;
- private ThemeType m_CheckTheme = 0;
- public override HideFlags chartHideFlags { get { return m_DebugModel ? HideFlags.None : HideFlags.HideInHierarchy; } }
- public UIComponentTheme theme { get { return m_Theme; } set { m_Theme = value; } }
- /// <summary>
- /// 背景样式。
- /// </summary>
- public Background background { get { return m_Background; } set { m_Background = value; color = Color.white; } }
- /// <summary>
- /// Update chart theme.
- /// ||切换内置主题。
- /// </summary>
- /// <param name="theme">theme</param>
- public bool UpdateTheme(ThemeType theme)
- {
- if (theme == ThemeType.Custom)
- {
- Debug.LogError("UpdateTheme: not support switch to Custom theme.");
- return false;
- }
- if (m_Theme.sharedTheme == null)
- m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
- m_Theme.sharedTheme.CopyTheme(theme);
- m_Theme.SetAllDirty();
- return true;
- }
- [Since("v3.9.0")]
- public void SetDataDirty()
- {
- m_DataDirty = true;
- m_RefreshChart = true;
- }
- public override void SetAllDirty()
- {
- base.SetAllDirty();
- SetDataDirty();
- }
- public override void SetVerticesDirty()
- {
- base.SetVerticesDirty();
- m_RefreshChart = true;
- }
- protected override void InitComponent()
- {
- base.InitComponent();
- if (m_Theme.sharedTheme == null)
- m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
- UIHelper.InitBackground(this);
- }
- protected override void CheckComponent()
- {
- base.CheckComponent();
- if (m_Theme.anyDirty)
- {
- if (m_Theme.componentDirty)
- {
- SetAllComponentDirty();
- }
- if (m_Theme.vertsDirty) RefreshGraph();
- m_Theme.ClearDirty();
- }
- }
- protected override void SetAllComponentDirty()
- {
- base.SetAllComponentDirty();
- InitComponent();
- }
- protected override void OnDrawPainterBase(VertexHelper vh, Painter painter)
- {
- vh.Clear();
- UIHelper.DrawBackground(vh, this);
- }
- protected override void Awake()
- {
- CheckTheme(true);
- base.Awake();
- }
- protected override void Update()
- {
- base.Update();
- if (m_DataDirty)
- {
- m_DataDirty = false;
- DataDirty();
- }
- }
- #if UNITY_EDITOR
- protected override void Reset()
- {
- base.Reset();
- Awake();
- }
- protected override void OnValidate()
- {
- base.OnValidate();
- }
- #endif
- protected virtual void DataDirty()
- {
- }
- protected virtual void CheckTheme(bool firstInit = false)
- {
- if (m_Theme.sharedTheme == null)
- {
- m_Theme.sharedTheme = XCThemeMgr.GetTheme(ThemeType.Default);
- }
- if (firstInit)
- {
- m_CheckTheme = m_Theme.themeType;
- }
- if (m_Theme.sharedTheme != null && m_CheckTheme != m_Theme.themeType)
- {
- m_CheckTheme = m_Theme.themeType;
- m_Theme.sharedTheme.CopyTheme(m_CheckTheme);
- #if UNITY_EDITOR
- UnityEditor.EditorUtility.SetDirty(this);
- #endif
- SetAllDirty();
- SetAllComponentDirty();
- OnThemeChanged();
- }
- }
- protected virtual void OnThemeChanged() { }
- }
- }
|