using UnityEngine.UI; namespace UnityEngine.Rendering.UI { /// /// DebugUIHandler for color widget. /// public class DebugUIHandlerColor : DebugUIHandlerWidget { /// Name of the widget. public Text nameLabel; /// /// Name of the widget.alue toggle. public UIFoldout valueToggle; /// Color image. public Image colorImage; /// Red float field. public DebugUIHandlerIndirectFloatField fieldR; /// Green float field. public DebugUIHandlerIndirectFloatField fieldG; /// Blue float field. public DebugUIHandlerIndirectFloatField fieldB; /// Alpha float field. public DebugUIHandlerIndirectFloatField fieldA; DebugUI.ColorField m_Field; DebugUIHandlerContainer m_Container; internal override void SetWidget(DebugUI.Widget widget) { base.SetWidget(widget); m_Field = CastWidget(); m_Container = GetComponent(); nameLabel.text = m_Field.displayName; fieldR.getter = () => m_Field.GetValue().r; fieldR.setter = x => SetValue(x, r: true); fieldR.nextUIHandler = fieldG; SetupSettings(fieldR); fieldG.getter = () => m_Field.GetValue().g; fieldG.setter = x => SetValue(x, g: true); fieldG.previousUIHandler = fieldR; fieldG.nextUIHandler = fieldB; SetupSettings(fieldG); fieldB.getter = () => m_Field.GetValue().b; fieldB.setter = x => SetValue(x, b: true); fieldB.previousUIHandler = fieldG; fieldB.nextUIHandler = m_Field.showAlpha ? fieldA : null; SetupSettings(fieldB); fieldA.gameObject.SetActive(m_Field.showAlpha); fieldA.getter = () => m_Field.GetValue().a; fieldA.setter = x => SetValue(x, a: true); fieldA.previousUIHandler = fieldB; SetupSettings(fieldA); UpdateColor(); } void SetValue(float x, bool r = false, bool g = false, bool b = false, bool a = false) { var color = m_Field.GetValue(); if (r) color.r = x; if (g) color.g = x; if (b) color.b = x; if (a) color.a = x; m_Field.SetValue(color); UpdateColor(); } void SetupSettings(DebugUIHandlerIndirectFloatField field) { field.parentUIHandler = this; field.incStepGetter = () => m_Field.incStep; field.incStepMultGetter = () => m_Field.incStepMult; field.decimalsGetter = () => m_Field.decimals; field.Init(); } /// /// OnSelection implementation. /// /// True if the selection wrapped around. /// Previous widget. /// State of the widget. public override bool OnSelection(bool fromNext, DebugUIHandlerWidget previous) { if (fromNext || valueToggle.isOn == false) { nameLabel.color = colorSelected; } else if (valueToggle.isOn) { if (m_Container.IsDirectChild(previous)) { nameLabel.color = colorSelected; } else { var lastItem = m_Container.GetLastItem(); DebugManager.instance.ChangeSelection(lastItem, false); } } return true; } /// /// OnDeselection implementation. /// public override void OnDeselection() { nameLabel.color = colorDefault; } /// /// OnIncrement implementation. /// /// True if incrementing fast. public override void OnIncrement(bool fast) { valueToggle.isOn = true; } /// /// OnDecrement implementation. /// /// Trye if decrementing fast. public override void OnDecrement(bool fast) { valueToggle.isOn = false; } /// /// OnAction implementation. /// public override void OnAction() { valueToggle.isOn = !valueToggle.isOn; } internal void UpdateColor() { if (colorImage != null) colorImage.color = m_Field.GetValue(); } /// /// Next implementation. /// /// Next child. public override DebugUIHandlerWidget Next() { if (!valueToggle.isOn || m_Container == null) return base.Next(); var firstChild = m_Container.GetFirstItem(); if (firstChild == null) return base.Next(); return firstChild; } } }