void BuildVector1PropertyView(Vector1ShaderProperty floatProperty) { VisualElement[] rows = null; switch (floatProperty.floatType) { case FloatType.Slider: { float min = Mathf.Min(floatProperty.value, floatProperty.rangeValues.x); float max = Mathf.Max(floatProperty.value, floatProperty.rangeValues.y); floatProperty.rangeValues = new Vector2(min, max); var defaultField = new FloatField { value = floatProperty.value }; var minField = new FloatField { value = floatProperty.rangeValues.x }; var maxField = new FloatField { value = floatProperty.rangeValues.y }; defaultField.RegisterValueChangedCallback(evt => { var value = (float)evt.newValue; floatProperty.value = value; this.MarkDirtyRepaint(); }); defaultField.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); float minValue = Mathf.Min(floatProperty.value, floatProperty.rangeValues.x); float maxValue = Mathf.Max(floatProperty.value, floatProperty.rangeValues.y); floatProperty.rangeValues = new Vector2(minValue, maxValue); minField.value = minValue; maxField.value = maxValue; DirtyNodes(); }); minField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Range Property Minimum"); float newValue = (float)evt.newValue; floatProperty.rangeValues = new Vector2(newValue, floatProperty.rangeValues.y); DirtyNodes(); }); minField.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt => { floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); defaultField.value = floatProperty.value; DirtyNodes(); }); maxField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Range Property Maximum"); float newValue = (float)evt.newValue; floatProperty.rangeValues = new Vector2(floatProperty.rangeValues.x, newValue); DirtyNodes(); }); maxField.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt => { floatProperty.value = Mathf.Max(Mathf.Min(floatProperty.value, floatProperty.rangeValues.y), floatProperty.rangeValues.x); defaultField.value = floatProperty.value; DirtyNodes(); }); rows = new VisualElement[4]; rows[0] = CreateRow("Default", defaultField); rows[2] = CreateRow("Min", minField); rows[3] = CreateRow("Max", maxField); } break; case FloatType.Integer: { floatProperty.value = (int)floatProperty.value; var defaultField = new IntegerField { value = (int)floatProperty.value }; defaultField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); var value = (int)evt.newValue; floatProperty.value = value; DirtyNodes(); }); rows = new VisualElement[2]; rows[0] = CreateRow("Default", defaultField); } break; default: { var defaultField = new FloatField { value = floatProperty.value }; defaultField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Property Value"); var value = (float)evt.newValue; floatProperty.value = value; DirtyNodes(); }); rows = new VisualElement[2]; rows[0] = CreateRow("Default", defaultField); } break; } if (!m_Graph.isSubGraph) { var modeField = new EnumField(floatProperty.floatType); modeField.RegisterValueChangedCallback(evt => { m_Graph.owner.RegisterCompleteObjectUndo("Change Vector1 Mode"); var value = (FloatType)evt.newValue; floatProperty.floatType = value; if (rows != null) { RemoveElements(rows); } BuildVector1PropertyView(floatProperty); this.MarkDirtyRepaint(); }); rows[1] = CreateRow("Mode", modeField); } if (rows == null) { return; } for (int i = 0; i < rows.Length; i++) { Add(rows[i]); } }
void BuildVector1PropertyField(Vector1ShaderProperty property) { switch (property.floatType) { case FloatType.Slider: { float min = Mathf.Min(property.value, property.rangeValues.x); float max = Mathf.Max(property.value, property.rangeValues.y); property.rangeValues = new Vector2(min, max); var defaultField = new FloatField { value = property.value }; var minField = new FloatField { value = property.rangeValues.x }; var maxField = new FloatField { value = property.rangeValues.y }; defaultField.RegisterValueChangedCallback(evt => { property.value = (float)evt.newValue; this.MarkDirtyRepaint(); }); defaultField.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt => { graph.owner.RegisterCompleteObjectUndo("Change Property Value"); float minValue = Mathf.Min(property.value, property.rangeValues.x); float maxValue = Mathf.Max(property.value, property.rangeValues.y); property.rangeValues = new Vector2(minValue, maxValue); minField.value = minValue; maxField.value = maxValue; DirtyNodes(); }); minField.RegisterValueChangedCallback(evt => { graph.owner.RegisterCompleteObjectUndo("Change Range Property Minimum"); property.rangeValues = new Vector2((float)evt.newValue, property.rangeValues.y); DirtyNodes(); }); minField.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt => { property.value = Mathf.Max(Mathf.Min(property.value, property.rangeValues.y), property.rangeValues.x); defaultField.value = property.value; DirtyNodes(); }); maxField.RegisterValueChangedCallback(evt => { graph.owner.RegisterCompleteObjectUndo("Change Range Property Maximum"); property.rangeValues = new Vector2(property.rangeValues.x, (float)evt.newValue); DirtyNodes(); }); maxField.Q("unity-text-input").RegisterCallback <FocusOutEvent>(evt => { property.value = Mathf.Max(Mathf.Min(property.value, property.rangeValues.y), property.rangeValues.x); defaultField.value = property.value; DirtyNodes(); }); AddRow("Default", defaultField); AddRow("Min", minField); AddRow("Max", maxField); } break; case FloatType.Integer: { property.value = (int)property.value; var defaultField = new IntegerField { value = (int)property.value }; defaultField.RegisterValueChangedCallback(evt => { graph.owner.RegisterCompleteObjectUndo("Change Property Value"); property.value = (int)evt.newValue; DirtyNodes(); }); AddRow("Default", defaultField); } break; default: { var defaultField = new FloatField { value = property.value }; defaultField.RegisterValueChangedCallback(evt => { graph.owner.RegisterCompleteObjectUndo("Change Property Value"); property.value = (float)evt.newValue; DirtyNodes(); }); AddRow("Default", defaultField); } break; } if (!graph.isSubGraph) { var modeField = new EnumField(property.floatType); modeField.RegisterValueChangedCallback(evt => { graph.owner.RegisterCompleteObjectUndo("Change Vector1 Mode"); property.floatType = (FloatType)evt.newValue; Rebuild(); }); AddRow("Mode", modeField); } }