236 lines
8.3 KiB
C#
236 lines
8.3 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using UnityEngine;
|
|||
|
#if dUI_TextMeshPro
|
|||
|
using TMPro;
|
|||
|
#endif
|
|||
|
|
|||
|
namespace XCharts.Runtime
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 主题
|
|||
|
/// </summary>
|
|||
|
public enum ThemeType
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 默认主题。
|
|||
|
/// </summary>
|
|||
|
Default,
|
|||
|
/// <summary>
|
|||
|
/// 亮主题。
|
|||
|
/// </summary>
|
|||
|
Light,
|
|||
|
/// <summary>
|
|||
|
/// 暗主题。
|
|||
|
/// </summary>
|
|||
|
Dark,
|
|||
|
/// <summary>
|
|||
|
/// 自定义主题。
|
|||
|
/// </summary>
|
|||
|
Custom,
|
|||
|
}
|
|||
|
|
|||
|
[Serializable]
|
|||
|
/// <summary>
|
|||
|
/// Theme.
|
|||
|
/// |主题相关配置。
|
|||
|
/// </summary>
|
|||
|
public class ThemeStyle : ChildComponent
|
|||
|
{
|
|||
|
[SerializeField] private bool m_Show = true;
|
|||
|
[SerializeField] private Theme m_SharedTheme;
|
|||
|
[SerializeField] private bool m_TransparentBackground = false;
|
|||
|
[SerializeField] private bool m_EnableCustomTheme = false;
|
|||
|
[SerializeField] private Font m_CustomFont;
|
|||
|
[SerializeField] private Color32 m_CustomBackgroundColor;
|
|||
|
#if UNITY_2020_2
|
|||
|
[NonReorderable]
|
|||
|
#endif
|
|||
|
[SerializeField] private List<Color32> m_CustomColorPalette = new List<Color32>(13);
|
|||
|
|
|||
|
public bool show { get { return m_Show; } }
|
|||
|
/// <summary>
|
|||
|
/// the theme of chart.
|
|||
|
/// |主题类型。
|
|||
|
/// </summary>
|
|||
|
public ThemeType themeType
|
|||
|
{
|
|||
|
get { return sharedTheme.themeType; }
|
|||
|
}
|
|||
|
public string themeName
|
|||
|
{
|
|||
|
get { return sharedTheme.themeName; }
|
|||
|
}
|
|||
|
|
|||
|
public Theme sharedTheme
|
|||
|
{
|
|||
|
get { return m_SharedTheme; }
|
|||
|
set { m_SharedTheme = value; SetAllDirty(); }
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// the contrast color of chart.
|
|||
|
/// |对比色。
|
|||
|
/// </summary>
|
|||
|
public Color32 contrastColor
|
|||
|
{
|
|||
|
get { return sharedTheme.contrastColor; }
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// the background color of chart.
|
|||
|
/// |背景颜色。
|
|||
|
/// </summary>
|
|||
|
public Color32 backgroundColor
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (m_TransparentBackground) return ColorUtil.clearColor32;
|
|||
|
else return m_EnableCustomTheme ? m_CustomBackgroundColor : sharedTheme.backgroundColor;
|
|||
|
}
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// Whether the background color is transparent. When true, the background color is not drawn.
|
|||
|
/// |是否透明背景颜色。当设置为true时,不绘制背景颜色。
|
|||
|
/// </summary>
|
|||
|
public bool transparentBackground
|
|||
|
{
|
|||
|
get { return m_TransparentBackground; }
|
|||
|
set { m_TransparentBackground = value; SetAllDirty(); }
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// Whether to customize theme colors. When set to true,
|
|||
|
/// you can use 'sync color to custom' to synchronize the theme color to the custom color. It can also be set manually.
|
|||
|
/// |是否自定义主题颜色。当设置为true时,可以用‘sync color to custom’同步主题的颜色到自定义颜色。也可以手动设置。
|
|||
|
/// </summary>
|
|||
|
/// <value></value>
|
|||
|
public bool enableCustomTheme
|
|||
|
{
|
|||
|
get { return m_EnableCustomTheme; }
|
|||
|
set { m_EnableCustomTheme = value; _colorDic.Clear(); SetAllDirty(); }
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// the custom background color of chart.
|
|||
|
/// |自定义的背景颜色。
|
|||
|
/// </summary>
|
|||
|
public Color32 customBackgroundColor
|
|||
|
{
|
|||
|
get { return m_CustomBackgroundColor; }
|
|||
|
set { m_CustomBackgroundColor = value; SetAllDirty(); }
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The color list of palette. If no color is set in series, the colors would be adopted sequentially and circularly from this list as the colors of series.
|
|||
|
/// |调色盘颜色列表。如果系列没有设置颜色,则会依次循环从该列表中取颜色作为系列颜色。
|
|||
|
/// </summary>
|
|||
|
public List<Color32> colorPalette
|
|||
|
{
|
|||
|
get { return m_EnableCustomTheme ? m_CustomColorPalette : sharedTheme.colorPalette; }
|
|||
|
}
|
|||
|
public List<Color32> customColorPalette { get { return m_CustomColorPalette; } set { m_CustomColorPalette = value; SetVerticesDirty(); } }
|
|||
|
public ComponentTheme common { get { return sharedTheme.common; } }
|
|||
|
public TitleTheme title { get { return sharedTheme.title; } }
|
|||
|
public SubTitleTheme subTitle { get { return sharedTheme.subTitle; } }
|
|||
|
public LegendTheme legend { get { return sharedTheme.legend; } }
|
|||
|
public AxisTheme axis { get { return sharedTheme.axis; } }
|
|||
|
public TooltipTheme tooltip { get { return sharedTheme.tooltip; } }
|
|||
|
public DataZoomTheme dataZoom { get { return sharedTheme.dataZoom; } }
|
|||
|
public VisualMapTheme visualMap { get { return sharedTheme.visualMap; } }
|
|||
|
public SerieTheme serie { get { return sharedTheme.serie; } }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets the color of the specified index from the palette.
|
|||
|
/// |获得调色盘对应系列索引的颜色值。
|
|||
|
/// </summary>
|
|||
|
/// <param name="index">编号索引</param>
|
|||
|
/// <returns>the color,or Color.clear when failed.颜色值,失败时返回Color.clear</returns>
|
|||
|
public Color32 GetColor(int index)
|
|||
|
{
|
|||
|
if (colorPalette.Count <= 0) return Color.clear;
|
|||
|
if (index < 0) index = 0;
|
|||
|
var newIndex = index < colorPalette.Count ? index : index % colorPalette.Count;
|
|||
|
if (newIndex < colorPalette.Count)
|
|||
|
return colorPalette[newIndex];
|
|||
|
else return Color.clear;
|
|||
|
}
|
|||
|
|
|||
|
public Color32 GetBackgroundColor(Background background)
|
|||
|
{
|
|||
|
if (background != null && background.show && !background.autoColor)
|
|||
|
return background.imageColor;
|
|||
|
else
|
|||
|
return backgroundColor;
|
|||
|
}
|
|||
|
|
|||
|
public void SyncSharedThemeColorToCustom()
|
|||
|
{
|
|||
|
m_CustomBackgroundColor = sharedTheme.backgroundColor;
|
|||
|
m_CustomColorPalette.Clear();
|
|||
|
foreach (var color in sharedTheme.colorPalette)
|
|||
|
{
|
|||
|
m_CustomColorPalette.Add(color);
|
|||
|
}
|
|||
|
SetAllDirty();
|
|||
|
}
|
|||
|
|
|||
|
public void CheckWarning(StringBuilder sb)
|
|||
|
{
|
|||
|
#if dUI_TextMeshPro
|
|||
|
if (sharedTheme.tmpFont == null)
|
|||
|
{
|
|||
|
sb.AppendFormat("warning:theme->tmpFont is null\n");
|
|||
|
}
|
|||
|
#else
|
|||
|
if (sharedTheme.font == null)
|
|||
|
{
|
|||
|
sb.AppendFormat("warning:theme->font is null\n");
|
|||
|
}
|
|||
|
#endif
|
|||
|
if (sharedTheme.colorPalette.Count == 0)
|
|||
|
{
|
|||
|
sb.AppendFormat("warning:theme->colorPalette is empty\n");
|
|||
|
}
|
|||
|
for (int i = 0; i < sharedTheme.colorPalette.Count; i++)
|
|||
|
{
|
|||
|
if (!ChartHelper.IsClearColor(sharedTheme.colorPalette[i]) && sharedTheme.colorPalette[i].a == 0)
|
|||
|
sb.AppendFormat("warning:theme->colorPalette[{0}] alpha = 0\n", i);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Dictionary<int, string> _colorDic = new Dictionary<int, string>();
|
|||
|
/// <summary>
|
|||
|
/// Gets the hexadecimal color string of the specified index from the palette.
|
|||
|
/// |获得指定索引的十六进制颜色值字符串。
|
|||
|
/// </summary>
|
|||
|
/// <param name="index"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public string GetColorStr(int index)
|
|||
|
{
|
|||
|
if (index < 0)
|
|||
|
{
|
|||
|
index = 0;
|
|||
|
}
|
|||
|
index = index % colorPalette.Count;
|
|||
|
if (_colorDic.ContainsKey(index)) return _colorDic[index];
|
|||
|
else
|
|||
|
{
|
|||
|
_colorDic[index] = ColorUtility.ToHtmlStringRGBA(GetColor(index));
|
|||
|
return _colorDic[index];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Convert the html string to color.
|
|||
|
/// |将字符串颜色值转成Color。
|
|||
|
/// </summary>
|
|||
|
/// <param name="hexColorStr"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Color32 GetColor(string hexColorStr)
|
|||
|
{
|
|||
|
Color color;
|
|||
|
ColorUtility.TryParseHtmlString(hexColorStr, out color);
|
|||
|
return (Color32) color;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|