123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- namespace SRF.UI
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Helpers;
- using UnityEngine;
- [Serializable]
- public class Style
- {
- public Color ActiveColor = Color.white;
- public Color DisabledColor = Color.white;
- public Color HoverColor = Color.white;
- public Sprite Image;
- public Color NormalColor = Color.white;
- public Style Copy()
- {
- var s = new Style();
- s.CopyFrom(this);
- return s;
- }
- public void CopyFrom(Style style)
- {
- Image = style.Image;
- NormalColor = style.NormalColor;
- HoverColor = style.HoverColor;
- ActiveColor = style.ActiveColor;
- DisabledColor = style.DisabledColor;
- }
- }
- [Serializable]
- public class StyleSheet : ScriptableObject
- {
- [SerializeField] private List<string> _keys = new List<string>();
- [SerializeField] private List<Style> _styles = new List<Style>();
- [SerializeField] public StyleSheet Parent;
- public Style GetStyle(string key, bool searchParent = true)
- {
- var i = _keys.IndexOf(key);
- if (i < 0)
- {
- if (searchParent && Parent != null)
- {
- return Parent.GetStyle(key);
- }
- return null;
- }
- return _styles[i];
- }
- #if UNITY_EDITOR
- public int AddStyle(string key)
- {
- if (_keys.Contains(key))
- {
- throw new ArgumentException("key already exists");
- }
- _keys.Add(key);
- _styles.Add(new Style());
- return _keys.Count - 1;
- }
- public bool DeleteStyle(string key)
- {
- var i = _keys.IndexOf(key);
- if (i < 0)
- {
- return false;
- }
- _keys.RemoveAt(i);
- _styles.RemoveAt(i);
- return true;
- }
- public IEnumerable<string> GetStyleKeys(bool includeParent = true)
- {
- if (Parent != null && includeParent)
- {
- return _keys.Union(Parent.GetStyleKeys());
- }
- return _keys.ToList();
- }
- [UnityEditor.MenuItem("Assets/Create/SRF/Style Sheet")]
- public static void CreateStyleSheet()
- {
- var o = AssetUtil.CreateAsset<StyleSheet>();
- AssetUtil.SelectAssetInProjectView(o);
- }
- #endif
- }
- }
|