using System;
using UnityEngine;
using UnityEngine.UI;
namespace XCharts.Runtime
{
///
/// UI组件基类。
///
[ExecuteInEditMode]
[RequireComponent(typeof(RectTransform))]
[DisallowMultipleComponent]
public class UIComponent : BaseGraph
{
[SerializeField] private bool m_DebugModel = false;
[SerializeField] protected UIComponentTheme m_Theme = new UIComponentTheme();
[SerializeField] private ImageStyle m_Background = new ImageStyle() { show = false };
protected bool m_DataDirty;
public override HideFlags chartHideFlags { get { return m_DebugModel ? HideFlags.None : HideFlags.HideInHierarchy; } }
public UIComponentTheme theme { get { return m_Theme; } set { m_Theme = value; } }
///
/// 背景样式。
///
public ImageStyle background { get { return m_Background; } set { m_Background = value; color = Color.white; } }
///
/// Update chart theme.
/// |切换内置主题。
///
/// theme
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;
}
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 Update()
{
base.Update();
if (m_DataDirty)
{
m_DataDirty = false;
DataDirty();
}
}
protected virtual void DataDirty()
{
}
}
}