ToneCurveNode() : base()
 {
     title = "Tone Curve";
     AddInputPort <Vector4>("Color");
     AddOutputPort <Vector4>("Color");
     RefreshPorts();
     m_RCurveField = new CurveField()
     {
         ranges = new Rect(0f, 0f, 1f, 1f)
     };
     m_GCurveField = new CurveField()
     {
         ranges = new Rect(0f, 0f, 1f, 1f)
     };
     m_BCurveField = new CurveField()
     {
         ranges = new Rect(0f, 0f, 1f, 1f)
     };
     m_ACurveField = new CurveField()
     {
         ranges = new Rect(0f, 0f, 1f, 1f)
     };
     m_GCurveField.SetEnabled(false);
     m_BCurveField.SetEnabled(false);
     m_RCurveField.OnValueChanged(e => m_GCurveField.value = e.newValue);
     m_RCurveField.OnValueChanged(e => m_BCurveField.value = e.newValue);
     extensionContainer.Add(m_RCurveField);
     extensionContainer.Add(m_GCurveField);
     extensionContainer.Add(m_BCurveField);
     extensionContainer.Add(m_ACurveField);
     RefreshExpandedState();
 }
        internal override void Apply(VisualElement container)
        {
            /// <sample>
            // Get a reference to the field from UXML and assign it its value.
            var uxmlField = container.Q <CurveField>("the-uxml-field");

            uxmlField.value = new AnimationCurve(new Keyframe[]
                                                 { new Keyframe(0, 0), new Keyframe(5, 8), new Keyframe(10, 4) });

            // Create a new field, disable it, and give it a style class.
            var csharpField = new CurveField("C# Field");

            csharpField.SetEnabled(false);
            csharpField.AddToClassList("some-styled-field");
            csharpField.value = uxmlField.value;
            container.Add(csharpField);

            // Mirror value of uxml field into the C# field.
            uxmlField.RegisterCallback <ChangeEvent <AnimationCurve> >((evt) =>
            {
                csharpField.value = evt.newValue;
            });
            /// </sample>
        }