private void Select(Vector2Int min, Vector2Int max)
        {
            Dopesheet.DsAnimationClip clip = Clip;
            int rows = clip.RowsCount;
            int cols = clip.ColsCount;

            max.x = Mathf.Min(max.x, cols - 1);
            min.x = Mathf.Max(min.x, 0);

            List <Dopesheet.DsKeyframe> selectKeyframes = new List <Dopesheet.DsKeyframe>();

            for (int i = min.y; i <= max.y; i++)
            {
                for (int j = min.x; j <= max.x; j++)
                {
                    if (!clip.IsSelected(i, j))
                    {
                        Dopesheet.DsKeyframe kf = clip.GetKeyframe(i, j);
                        if (kf != null)
                        {
                            selectKeyframes.Add(kf);
                        }
                    }
                }
            }
            clip.SelectKeyframes(selectKeyframes.ToArray());
            m_renderGraphics = true;
        }
        private void OnTimelineDrop()
        {
            Dopesheet.DsAnimationClip clip = Clip;

            Dopesheet.DsKeyframe[] selectedKeyframes = clip.SelectedKeyframes.ToArray();
            Dictionary <int, Dopesheet.DsKeyframe> selectedKfDictionary = new Dictionary <int, Dopesheet.DsKeyframe>();

            for (int i = 0; i < selectedKeyframes.Length; ++i)
            {
                Dopesheet.DsKeyframe keyframe = selectedKeyframes[i];
                if (keyframe.Col < 0)
                {
                    keyframe.Col = 0;
                }

                if (keyframe.Col >= m_pointer.ColumnsCount)
                {
                    keyframe.Col = m_pointer.ColumnsCount - 1;
                }

                int key = keyframe.Row.Index * clip.ColsCount + keyframe.Col;
                if (!selectedKfDictionary.ContainsKey(key))
                {
                    selectedKfDictionary.Add(key, keyframe);
                }
            }

            clip.RemoveKeyframes(false, selectedKeyframes);
            clip.ClearSelectedKeyframes();

            clip.AddKeyframes(selectedKfDictionary.Values.ToArray());
            clip.SelectKeyframes(selectedKfDictionary.Values.ToArray());

            clip.Refresh(true, true, true);

            m_renderGraphics = true;
        }