void HandleDragAndDrop() { if (TimelineWindow.instance.state.editSequence.isReadOnly) { return; } if (Event.current == null || Event.current.type != EventType.DragUpdated && Event.current.type != EventType.DragPerform && Event.current.type != EventType.DragExited) { return; } timeline.CreateMarkerTrack(); // Ensure Marker track is created. var objectsBeingDropped = DragAndDrop.objectReferences.OfType <Object>(); var candidateTime = TimelineHelpers.GetCandidateTime(Event.current.mousePosition); var perform = Event.current.type == EventType.DragPerform; var director = state.editSequence != null ? state.editSequence.director : null; DragAndDrop.visualMode = TimelineDragging.HandleClipPaneObjectDragAndDrop(objectsBeingDropped, timeline.markerTrack, perform, timeline, null, director, candidateTime, TimelineDragging.ResolveType); if (perform && DragAndDrop.visualMode == DragAndDropVisualMode.Copy) { DragAndDrop.AcceptDrag(); } }
public TimelineTreeViewGUI(TimelineWindow sequencerWindow, TimelineAsset timeline, Rect rect) { m_Timeline = timeline; m_Window = sequencerWindow; var treeviewState = new TreeViewState(); treeviewState.scrollPos = new Vector2(treeviewState.scrollPos.x, TimelineWindowViewPrefs.GetOrCreateViewModel(m_Timeline).verticalScroll); m_TreeView = new TreeViewController(sequencerWindow, treeviewState); m_TreeView.horizontalScrollbarStyle = GUIStyle.none; m_TreeView.scrollViewStyle = GUI.skin.scrollView; m_TreeView.keyboardInputCallback = sequencerWindow.TreeViewKeyboardCallback; m_TimelineTreeView = new TimelineTreeView(sequencerWindow, m_TreeView); var dragging = new TimelineDragging(m_TreeView, m_Window, m_Timeline); m_DataSource = new TimelineDataSource(this, m_TreeView, sequencerWindow); m_DataSource.onVisibleRowsChanged += m_TimelineTreeView.CalculateRowRects; m_TreeView.Init(rect, m_DataSource, m_TimelineTreeView, dragging); m_DataSource.ExpandItems(m_DataSource.root); }
static bool ResolveType(IEnumerable <Type> types, Action <Type> onComplete, string formatString) { void CreateMarkerTrackOnComplete(Type type) { WindowState state = TimelineWindow.instance.state; state.editSequence.asset.CreateMarkerTrack(); state.showMarkerHeader = true; onComplete(type); } return(TimelineDragging.ResolveType(types, CreateMarkerTrackOnComplete, formatString)); }
void DoTrackBindingGUI(Rect rect, Rect headerRect) { var bindingRect = new Rect( rect.xMin, rect.y + (rect.height - WindowConstants.trackHeaderButtonSize) / 2f, headerRect.xMax - WindowConstants.trackHeaderMaxButtonsWidth - rect.xMin, WindowConstants.trackHeaderButtonSize); if (bindingRect.Contains(Event.current.mousePosition) && TimelineDragging.IsDraggingEvent() && DragAndDrop.objectReferences.Length == 1) { TimelineDragging.HandleBindingDragAndDrop(track, BindingUtility.GetRequiredBindingType(m_TrackDrawData.m_Binding)); Event.current.Use(); } else { if (m_TrackDrawData.m_Binding.outputTargetType != null && typeof(Object).IsAssignableFrom(m_TrackDrawData.m_Binding.outputTargetType)) { ObjectBindingField(bindingRect, m_TrackDrawData.m_TrackBinding, m_TrackDrawData.m_Binding); } } }
void DoTrackBindingGUI(Rect rect, Rect headerRect, WindowState state) { var spaceUsedByButtons = 2f + ((5 + WindowConstants.trackHeaderButtonPadding) * WindowConstants.trackHeaderButtonSize); rect.y += (rect.height - 16.0f) / 2f; rect.height = 16f; rect.width = (headerRect.xMax - spaceUsedByButtons - rect.xMin); var binding = state.editSequence.director.GetGenericBinding(track); if (rect.Contains(Event.current.mousePosition) && TimelineDragging.IsDraggingEvent() && DragAndDrop.objectReferences.Length == 1) { TimelineDragging.HandleBindingDragAndDrop(track, BindingUtility.GetRequiredBindingType(m_Bindings[0])); } else { if (m_Bindings[0].outputTargetType != null && typeof(Object).IsAssignableFrom(m_Bindings[0].outputTargetType)) { ObjectBindingField(rect, binding, m_Bindings[0]); } } }