private void OnTimelineBeginDrag() { Select(); Dopesheet.DsAnimationClip clip = Clip; IList <Dopesheet.DsKeyframe> selectedKeyframes = clip.SelectedKeyframes; if (selectedKeyframes != null && selectedKeyframes.Count > 0) { BeginRefresh(); } List <Dopesheet.DsKeyframe> keyframesWithUnselectedChildren = new List <Dopesheet.DsKeyframe>(); for (int i = 0; i < selectedKeyframes.Count; ++i) { Dopesheet.DsKeyframe selectedKeyframe = selectedKeyframes[i]; if (HasUnselectedDescendants(selectedKeyframe)) { Dopesheet.DsKeyframe keyframe = new Dopesheet.DsKeyframe(selectedKeyframe.Row, selectedKeyframe.Col, selectedKeyframe.Value); keyframesWithUnselectedChildren.Add(keyframe); } } clip.AddKeyframes(keyframesWithUnselectedChildren.ToArray()); }
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; }