protected override bool MouseDown(Event evt, WindowState state) { if (state.IsCurrentEditingASequencerTextField()) { return(false); } m_ActiveRect = TimelineWindow.instance.sequenceContentRect; if (!m_ActiveRect.Contains(evt.mousePosition)) { return(false); } if (!CanStartRectangle(evt)) { return(false); } if (enableAutoPan) { m_TimeAreaAutoPanner = new TimeAreaAutoPanner(state); } m_StartPoint = new TimelinePoint(state, evt.mousePosition); m_EndPixel = evt.mousePosition; state.AddCaptured(this); return(true); }
protected override bool KeyDown(Event evt, WindowState state) { if (evt.keyCode == KeyCode.Escape) { m_TimeAreaAutoPanner = null; GUIUtility.hotControl = 0; state.RemoveCaptured(this); return(true); } return(false); }
protected override bool MouseUp(Event evt, WindowState state) { m_TimeAreaAutoPanner = null; Rect rect = CurrentRectangle(); if (IsValidRect(rect)) { OnFinish(evt, state, rect); } state.RemoveCaptured(this); return(true); }
protected override bool MouseUp(Event evt, WindowState state) { if (!m_Dragged) { var item = PickerUtils.TopmostPickedItem() as ISelectable; if (item == null) { return(false); } if (!item.IsSelected()) { return(false); } // Re-selecting an item part of a multi-selection should only keep this item selected. if (SelectionManager.Count() > 1 && ItemSelection.CanClearSelection(evt)) { SelectionManager.Clear(); item.Select(); return(true); } if (m_CycleMarkersPending) { m_CycleMarkersPending = false; TimelineMarkerClusterGUI.CycleMarkers(); return(true); } return(false); } m_TimeAreaAutoPanner = null; DropItems(); m_SnapEngine = null; m_MoveItemHandler = null; state.Evaluate(); state.RemoveCaptured(this); m_Dragged = false; TimelineCursors.ClearCursor(); return(true); }
protected override bool MouseDrag(Event evt, WindowState state) { if (state.editSequence.isReadOnly) { return(false); } // case 1099285 - ctrl-click can cause no clips to be selected var selectedItemsGUI = SelectionManager.SelectedItems(); if (!selectedItemsGUI.Any()) { m_Dragged = false; return(false); } const float hDeadZone = 5.0f; const float vDeadZone = 5.0f; bool vDone = m_VerticalMovementDone || Math.Abs(evt.mousePosition.y - m_MouseDownPosition.y) > vDeadZone; bool hDone = m_HorizontalMovementDone || Math.Abs(evt.mousePosition.x - m_MouseDownPosition.x) > hDeadZone; m_CycleMarkersPending = false; if (!m_Dragged) { var canStartMove = vDone || hDone; if (canStartMove) { state.AddCaptured(this); m_Dragged = true; var referenceTrack = GetTrackDropTargetAt(state, m_MouseDownPosition); foreach (var item in selectedItemsGUI) { item.gui.StartDrag(); } m_MoveItemHandler = new MoveItemHandler(state); m_MoveItemHandler.Grab(selectedItemsGUI, referenceTrack, m_MouseDownPosition); m_SnapEngine = new SnapEngine(m_MoveItemHandler, m_MoveItemHandler, ManipulateEdges.Both, state, m_MouseDownPosition); m_TimeAreaAutoPanner = new TimeAreaAutoPanner(state); } } if (!m_VerticalMovementDone) { m_VerticalMovementDone = vDone; if (m_VerticalMovementDone) { m_MoveItemHandler.OnTrackDetach(); } } if (!m_HorizontalMovementDone) { m_HorizontalMovementDone = hDone; } if (m_Dragged) { if (m_HorizontalMovementDone) { m_SnapEngine.Snap(evt.mousePosition, evt.modifiers); } if (m_VerticalMovementDone) { var track = GetTrackDropTargetAt(state, evt.mousePosition); m_MoveItemHandler.UpdateTrackTarget(track); } state.Evaluate(); } return(true); }
public void OnGUI(WindowState state, EventType rawType, Vector2 mousePosition) { if (m_Id == 0) { m_Id = GUIUtility.GetPermanentControlID(); } if (state == null || state.GetWindow().treeView == null) { return; } var evt = Event.current; if (rawType == EventType.MouseDown || evt.type == EventType.MouseDown) { if (state.IsCurrentEditingASequencerTextField()) { return; } m_ActiveRect = TimelineWindow.instance.sequenceContentRect; //remove the track header splitter overlap m_ActiveRect.x += k_HeaderSplitterOverlap; m_ActiveRect.width -= k_HeaderSplitterOverlap; if (!m_ActiveRect.Contains(mousePosition)) { return; } if (!CanStartRectangle(evt)) { return; } if (enableAutoPan) { m_TimeAreaAutoPanner = new TimeAreaAutoPanner(state); } m_StartPoint = new TimelinePoint(state, mousePosition); m_EndPixel = mousePosition; GUIUtility.hotControl = m_Id; //HACK: Because the treeView eats all the events, steal the hotControl if necessary... evt.Use(); return; } switch (evt.GetTypeForControl(m_Id)) { case EventType.KeyDown: { if (GUIUtility.hotControl == m_Id) { if (evt.keyCode == KeyCode.Escape) { m_TimeAreaAutoPanner = null; GUIUtility.hotControl = 0; evt.Use(); } } return; } case EventType.MouseDrag: { if (GUIUtility.hotControl != m_Id) { return; } m_EndPixel = mousePosition; evt.Use(); return; } case EventType.MouseUp: { if (GUIUtility.hotControl != m_Id) { return; } m_TimeAreaAutoPanner = null; var rect = CurrentRectangle(); if (IsValidRect(rect)) { OnFinish(evt, state, rect); } GUIUtility.hotControl = 0; evt.Use(); return; } } if (GUIUtility.hotControl == m_Id) { if (evt.type == EventType.Repaint) { var r = CurrentRectangle(); if (IsValidRect(r)) { using (new GUIViewportScope(m_ActiveRect)) { DrawRectangle(r); } } } if (m_TimeAreaAutoPanner != null) { m_TimeAreaAutoPanner.OnGUI(evt); } } }