21 public static void OnComponentStyleChanged(
CUIComponent host)
23 CUITypeMetaData meta = CUITypeMetaData.Get(host.GetType());
24 host.ResolvedStyle =
CUIStyle.Merge(meta.ResolvedDefaultStyle, host.
Style);
25 ApplyStyleOn(host.ResolvedStyle, host);
26 host.InvokeOnStyleApplied();
29 public static void OnComponentStylePropChanged(
CUIComponent host,
string key)
31 CUITypeMetaData meta = CUITypeMetaData.Get(host.GetType());
33 if (meta.ResolvedDefaultStyle.
Props.ContainsKey(key))
35 host.ResolvedStyle[key] = meta.ResolvedDefaultStyle[key];
40 host.ResolvedStyle[key] = host.
Style[key];
44 host.InvokeOnStyleApplied();
47 public static void OnPaletteChange(CUIPalette palette)
49 foreach (Type CUIType
in CUIReflection.CUITypes.Values)
53 ApplyStyleOn(c.ResolvedStyle, c);
58 public static void OnDefaultStyleChanged(Type CUIType)
63 CUIReflection.CUITypeTree[CUIType].RunRecursive((node) =>
65 node.Meta.ResolvedDefaultStyle =
CUIStyle.Merge(
66 node.Parent?.Meta.ResolvedDefaultStyle,
67 node.Meta.DefaultStyle
72 CUIReflection.CUITypeTree[CUIType].RunRecursive((node) =>
76 OnComponentStyleChanged(c);
82 CUI.Warning($
"OnDefaultStyleChanged| {e}");
86 public static void OnDefaultStylePropChanged(Type CUIType,
string key)
91 CUIReflection.CUITypeTree[CUIType].RunRecursive((node) =>
93 if (node.Parent !=
null)
95 if (node.Parent.Meta.ResolvedDefaultStyle.Props.ContainsKey(key))
97 node.Meta.ResolvedDefaultStyle[key] = node.Parent.Meta.ResolvedDefaultStyle[key];
101 if (node.Meta.DefaultStyle.Props.ContainsKey(key))
103 node.Meta.ResolvedDefaultStyle[key] = node.Meta.DefaultStyle[key];
108 CUIReflection.CUITypeTree[CUIType].RunRecursive((node) =>
112 OnComponentStylePropChanged(c, key);
129 CUI.Warning($
"Style target is null");
133 CUITypeMetaData meta = CUITypeMetaData.Get(target.GetType());
135 foreach (
string name
in style.
Props.Keys)
142 public static string CUIPalettePrefix =
"CUIPalette.";
148 if (target.Unreal)
return;
150 if (target ==
null) {
CUI.Warning($
"Style target is null");
return; }
152 meta ??= CUITypeMetaData.Get(target.GetType());
154 PropertyInfo pi = meta.Assignable.GetValueOrDefault(name);
158 if (CUIPalette.NotifyExcessivePropStyles)
CUI.Warning($
"Can't apply style: Couldn't find {name} prop in {target}");
163 string raw = style[name];
165 if (raw.StartsWith(CUIPalettePrefix))
167 PaletteExtractResult result = CUIPalette.Extract(raw.Substring(CUIPalettePrefix.Length), target.
Palette);
174 if (CUIPalette.NotifiMissingPropStyles)
176 CUI.Warning($
"Can't find {raw.Substring(CUIPalettePrefix.Length)} palette style for {target}");
182 MethodInfo parse = CUIExtensions.Parse.GetValueOrDefault(pi.PropertyType);
184 parse ??= pi.PropertyType.GetMethod(
186 BindingFlags.Public | BindingFlags.Static,
187 new Type[] { typeof(string) }
192 CUI.Warning($
"Can't parse style prop {name} for {target} because it's type {pi.PropertyType.Name} is missing Parse method");
198 pi.SetValue(target, parse.Invoke(
null,
new object[] { raw }));
202 CUI.Warning($
"Can't parse {raw} into {pi.PropertyType.Name} for {target}");