void InitCurvePresets()
        {
            if (m_CurvePresets == null)
            {
                AnimationCurve max = m_CurveEditor.animationCurves[0].curve;
                AnimationCurve min = m_CurveEditor.animationCurves.Length > 1 ? m_CurveEditor.animationCurves[1].curve : null;

                // Selection callback for library window
                System.Action <DoubleCurve> presetSelectedCallback = delegate(DoubleCurve presetCurve) {
                    var doubleCurve = new DoubleCurve(min, max, true);
                    doubleCurve.minCurve.keys         = CurveEditorWindow.GetNormalizedKeys(presetCurve.minCurve.keys, m_CurveEditor);
                    doubleCurve.minCurve.postWrapMode = presetCurve.minCurve.postWrapMode;
                    doubleCurve.minCurve.preWrapMode  = presetCurve.minCurve.preWrapMode;

                    doubleCurve.maxCurve.keys         = CurveEditorWindow.GetNormalizedKeys(presetCurve.maxCurve.keys, m_CurveEditor);
                    doubleCurve.maxCurve.postWrapMode = presetCurve.maxCurve.postWrapMode;
                    doubleCurve.maxCurve.preWrapMode  = presetCurve.maxCurve.preWrapMode;

                    m_CurveEditor.SelectNone();
                    RefreshShownCurves();
                    SendEvent("CurveChanged", true);
                };

                // We set the curve to save when showing the popup to ensure to scale the current state of the curve
                m_CurvePresets = new DoubleCurvePresetsContentsForPopupWindow(new DoubleCurve(min, max, true), presetSelectedCallback);
                m_CurvePresets.InitIfNeeded();
                m_CurvePresets.GetPresetLibraryEditor().GetCurrentLib().useRanges = false;
            }
        }
 public void OnDestroy()
 {
     m_DoubleCurvePresets.GetPresetLibraryEditor().UnloadUsedLibraries();
 }