void OnGUI() { InitializeGUIIfRequired(); UpdateGUIConstants(); UpdateViewStateHash(); EditMode.HandleModeClutch(); // TODO We Want that here? DetectStylesChange(); DetectActiveSceneChanges(); DetectStateChanges(); state.ProcessStartFramePendingUpdates(); var clipRect = new Rect(0.0f, 0.0f, position.width, position.height); using (new GUIViewportScope(clipRect)) state.InvokeWindowOnGuiStarted(Event.current); if (Event.current.type == EventType.MouseDrag && state != null && state.mouseDragLag > 0.0f) { state.mouseDragLag -= Time.deltaTime; return; } if (PerformUndo()) { return; } if (state != null && state.ignorePreview && state.playing) { if (state.recording) { state.recording = false; } Repaint(); } clientArea = position; PlaybackScroller.AutoScroll(state); DoLayout(); // overlays if (state.captured.Count > 0) { using (new GUIViewportScope(clipRect)) { foreach (var o in state.captured) { o.Overlay(Event.current, state); } Repaint(); } } if (state.showQuadTree) { var fillColor = new Color(1.0f, 1.0f, 1.0f, 0.1f); state.spacePartitioner.DebugDraw(fillColor, Color.yellow); state.headerSpacePartitioner.DebugDraw(fillColor, Color.green); } // attempt another rebuild -- this will avoid 1 frame flashes if (Event.current.type == EventType.Repaint) { RebuildGraphIfNecessary(); state.ProcessEndFramePendingUpdates(); } using (new GUIViewportScope(clipRect)) { if (Event.current.type == EventType.Repaint) { EditMode.inputHandler.OnGUI(state, Event.current); } } if (Event.current.type == EventType.Repaint) { hierarchyChangedThisFrame = false; } }
public void OnExitDrag() { isDragging = false; EditMode.FinishTrim(); TimelineWindow.instance.Repaint(); }
public void OnTrackDetach() { EditMode.OnTrackDetach(movingItems); }
public void Grab(IEnumerable <ITimelineItem> items, TrackAsset referenceTrack, Vector2 mousePosition) { if (items == null) { return; } items = items.ToArray(); // Cache enumeration result if (!items.Any()) { return; } m_GrabbedModalUndoGroup = Undo.GetCurrentGroup(); var trackItems = items.GroupBy(c => c.parentTrack).ToArray(); var trackItemsCount = trackItems.Length; var tracks = items.Select(c => c.parentTrack).Where(x => x != null).Distinct(); movingItems = new MovingItems[trackItemsCount]; allowTrackSwitch = trackItemsCount == 1 && !trackItems.SelectMany(x => x).Any(x => x is MarkerItem); // For now, track switch is only supported when all items are on the same track and there are no items foreach (var sourceTrack in tracks) { // one push per track handles all the clips on the track TimelineUndo.PushUndo(sourceTrack, "Move Items"); // push all markers on the track because of ripple foreach (var marker in sourceTrack.GetMarkers().OfType <ScriptableObject>()) { TimelineUndo.PushUndo(marker, "Move Items"); } } for (var i = 0; i < trackItemsCount; ++i) { var track = trackItems[i].Key; var grabbedItems = new MovingItems(m_State, track, trackItems[i].ToArray(), referenceTrack, mousePosition, allowTrackSwitch); movingItems[i] = grabbedItems; } m_LeftMostMovingItems = null; m_RightMostMovingItems = null; foreach (var grabbedTrackItems in movingItems) { if (m_LeftMostMovingItems == null || m_LeftMostMovingItems.start > grabbedTrackItems.start) { m_LeftMostMovingItems = grabbedTrackItems; } if (m_RightMostMovingItems == null || m_RightMostMovingItems.end < grabbedTrackItems.end) { m_RightMostMovingItems = grabbedTrackItems; } } m_ItemGUIs = new HashSet <TimelineItemGUI>(); m_ItemsGroup = new ItemsGroup(items); foreach (var item in items) { m_ItemGUIs.Add(item.gui); } targetTrack = referenceTrack; EditMode.BeginMove(this); m_Grabbing = true; }
public void Grab(IEnumerable <ITimelineItem> items, TrackAsset referenceTrack, Vector2 mousePosition) { if (items == null) { return; } items = items.ToArray(); // Cache enumeration result if (!items.Any()) { return; } m_GrabbedModalUndoGroup = Undo.GetCurrentGroup(); var trackItems = items.GroupBy(c => c.parentTrack).ToArray(); var trackItemsCount = trackItems.Length; movingItems = new MovingItems[trackItemsCount]; allowTrackSwitch = trackItemsCount == 1 && !trackItems.SelectMany(x => x).Any(x => x is MarkerItem); // For now, track switch is only supported when all items are on the same track and there are no items foreach (var item in referenceTrack.GetItems()) // Ripple changes other items { item.PushUndo("Move Items"); } for (var i = 0; i < trackItemsCount; ++i) { var track = trackItems[i].Key; var grabbedItems = new MovingItems(m_State, track, trackItems[i].ToArray(), referenceTrack, mousePosition, allowTrackSwitch); movingItems[i] = grabbedItems; } m_LeftMostMovingItems = null; m_RightMostMovingItems = null; foreach (var grabbedTrackItems in movingItems) { if (m_LeftMostMovingItems == null || m_LeftMostMovingItems.start > grabbedTrackItems.start) { m_LeftMostMovingItems = grabbedTrackItems; } if (m_RightMostMovingItems == null || m_RightMostMovingItems.end < grabbedTrackItems.end) { m_RightMostMovingItems = grabbedTrackItems; } } m_ItemGUIs = new HashSet <TimelineItemGUI>(); m_ItemsGroup = new ItemsGroup(items); foreach (var item in items) { m_ItemGUIs.Add(item.gui); } targetTrack = referenceTrack; EditMode.BeginMove(this); m_Grabbing = true; }