public void OnAttractedEdge(IAttractable attractable, AttractedEdge edge, double time, double duration) { TimelineClipGUI timelineClipGUI = attractable as TimelineClipGUI; if (timelineClipGUI != null) { TimelineClip clip = timelineClipGUI.clip; if (edge == AttractedEdge.Right) { clip.duration = time - clip.start; clip.duration = Math.Max(clip.duration, TimelineClip.kMinDuration); } else if (edge == AttractedEdge.Left) { double num = time - clip.start; double newValue = clip.clipIn + num * clip.timeScale; if (DragClipHandle.SetClipIn(clip, newValue, num)) { this.m_FrameSnap.Reset(); } } else { clip.start = time; clip.duration = duration; } } }
protected virtual void OnMouseDrag(Event evt, TimelineWindow.TimelineState state, TimelineClipHandle handle) { if (evt.get_modifiers() == 2) { DragClipHandle.ManipulateBlending(handle, evt, state.timeAreaScale.x); } else { if (!this.m_UndoSaved) { TimelineUndo.PushUndo(handle.clip.parentTrackGUI.track, "Trim Clip"); this.m_UndoSaved = true; } float num = evt.get_delta().x / state.timeAreaScale.x; if (this.m_Ripple != null) { this.m_Ripple.Run(num, state); } ManipulateEdges edges; if (handle.direction == TimelineClipHandle.DragDirection.Right) { double val = this.m_FrameSnap.ApplyOffset(handle.clip.clip.duration, num, state); handle.clip.clip.duration = Math.Max(val, TimelineClip.kMinDuration); if (handle.clip.clip.SupportsSpeedMultiplier() && evt.get_modifiers() == 1) { double num2 = this.m_OriginalDuration / handle.clip.clip.duration; handle.clip.clip.timeScale = this.m_OriginalTimeScale * num2; } edges = ManipulateEdges.Right; } else { double num3 = handle.clip.clip.clipIn / handle.clip.clip.timeScale; if (num3 > 0.0 && num3 + (double)num < 0.0) { num = (float)(-(float)num3); } if (this.m_MagnetEngine == null || !this.m_MagnetEngine.isSnapped) { double newValue = this.m_FrameSnap.ApplyOffset(num3, num, state) * handle.clip.clip.timeScale; DragClipHandle.SetClipIn(handle.clip.clip, newValue, this.m_FrameSnap.lastOffsetApplied); } edges = ManipulateEdges.Left; } if (this.m_MagnetEngine != null && evt.get_modifiers() != 1) { this.m_MagnetEngine.Snap(evt.get_delta().x, edges); } handle.clip.clip.duration = Math.Max(handle.clip.clip.duration, TimelineClip.kMinDuration); } }