From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Editor/Manipulators/EditMode.cs | 344 +++++++++++++++++++++ 1 file changed, 344 insertions(+) create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs') diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs new file mode 100644 index 0000000..475b586 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs @@ -0,0 +1,344 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UnityEditor.Timeline +{ + static class EditMode + { + public enum EditType + { + None = -1, + Mix = 0, + Ripple = 1, + Replace = 2 + } + + interface ISubEditMode + { + IMoveItemMode moveItemMode { get; } + IMoveItemDrawer moveItemDrawer { get; } + ITrimItemMode trimItemMode { get; } + ITrimItemDrawer trimItemDrawer { get; } + IAddDeleteItemMode addDeleteItemMode { get; } + + Color color { get; } + KeyCode clutchKey { get; } + + void Reset(); + } + + class SubEditMode: ISubEditMode + where TMoveMode : class, IMoveItemMode, IMoveItemDrawer, new() + where TTrimMode : class, ITrimItemMode, ITrimItemDrawer, new() + where TAddDeleteMode : class, IAddDeleteItemMode, new() + { + public SubEditMode(Color guiColor, KeyCode key) + { + color = guiColor; + clutchKey = key; + Reset(); + } + + public void Reset() + { + m_MoveItemMode = new TMoveMode(); + m_TrimItemMode = new TTrimMode(); + m_AddDeleteItemMode = new TAddDeleteMode(); + } + + TMoveMode m_MoveItemMode; + TTrimMode m_TrimItemMode; + TAddDeleteMode m_AddDeleteItemMode; + + public IMoveItemMode moveItemMode { get { return m_MoveItemMode; } } + public IMoveItemDrawer moveItemDrawer { get { return m_MoveItemMode; } } + public ITrimItemMode trimItemMode { get { return m_TrimItemMode; } } + public ITrimItemDrawer trimItemDrawer { get { return m_TrimItemMode; } } + public IAddDeleteItemMode addDeleteItemMode { get { return m_AddDeleteItemMode; } } + public Color color { get; } + public KeyCode clutchKey { get; } + } + + static readonly Dictionary k_EditModes = new Dictionary + { + { EditType.Mix, new SubEditMode(DirectorStyles.kMixToolColor, KeyCode.Alpha1) }, + { EditType.Ripple, new SubEditMode(DirectorStyles.kRippleToolColor, KeyCode.Alpha2) }, + { EditType.Replace, new SubEditMode(DirectorStyles.kReplaceToolColor, KeyCode.Alpha3) } + }; + + static EditType s_CurrentEditType = EditType.Mix; + static EditType s_OverrideEditType = EditType.None; + + static ITrimmable s_CurrentTrimItem; + static TrimEdge s_CurrentTrimDirection; + static MoveItemHandler s_CurrentMoveItemHandler; + static EditModeInputHandler s_InputHandler = new EditModeInputHandler(); + + static ITrimItemMode trimMode + { + get { return GetSubEditMode(editType).trimItemMode; } + } + + static ITrimItemDrawer trimDrawer + { + get { return GetSubEditMode(editType).trimItemDrawer; } + } + + static IMoveItemMode moveMode + { + get { return GetSubEditMode(editType).moveItemMode; } + } + + static IMoveItemDrawer moveDrawer + { + get { return GetSubEditMode(editType).moveItemDrawer; } + } + + static IAddDeleteItemMode addDeleteMode + { + get { return GetSubEditMode(editType).addDeleteItemMode; } + } + + public static EditModeInputHandler inputHandler + { + get { return s_InputHandler; } + } + + static Color modeColor + { + get { return GetSubEditMode(editType).color; } + } + + public static EditType editType + { + get + { + if (s_OverrideEditType != EditType.None) + return s_OverrideEditType; + + var window = TimelineWindow.instance; + if (window != null) + s_CurrentEditType = window.state.editType; + + return s_CurrentEditType; + } + set + { + s_CurrentEditType = value; + + var window = TimelineWindow.instance; + if (window != null) + window.state.editType = value; + + s_OverrideEditType = EditType.None; + } + } + + static ISubEditMode GetSubEditMode(EditType type) + { + var subEditMode = k_EditModes[type]; + if (subEditMode != null) + return subEditMode; + + Debug.LogError("Unsupported editmode type"); + return null; + } + + static EditType GetSubEditType(KeyCode key) + { + foreach (var subEditMode in k_EditModes) + { + if (subEditMode.Value.clutchKey == key) + return subEditMode.Key; + } + return EditType.None; + } + + public static void ClearEditMode() + { + k_EditModes[editType].Reset(); + } + + public static void BeginTrim(ITimelineItem item, TrimEdge trimDirection) + { + var itemToTrim = item as ITrimmable; + if (itemToTrim == null) return; + + s_CurrentTrimItem = itemToTrim; + s_CurrentTrimDirection = trimDirection; + trimMode.OnBeforeTrim(itemToTrim, trimDirection); + TimelineUndo.PushUndo(itemToTrim.parentTrack, "Trim Clip"); + } + + public static void TrimStart(ITimelineItem item, double time) + { + var itemToTrim = item as ITrimmable; + if (itemToTrim == null) return; + + trimMode.TrimStart(itemToTrim, time); + } + + public static void TrimEnd(ITimelineItem item, double time, bool affectTimeScale) + { + var itemToTrim = item as ITrimmable; + if (itemToTrim == null) return; + + trimMode.TrimEnd(itemToTrim, time, affectTimeScale); + } + + public static void DrawTrimGUI(WindowState state, TimelineItemGUI item, TrimEdge edge) + { + trimDrawer.DrawGUI(state, item.rect, modeColor, edge); + } + + public static void FinishTrim() + { + s_CurrentTrimItem = null; + + TimelineCursors.ClearCursor(); + ClearEditMode(); + + TimelineEditor.Refresh(RefreshReason.ContentsModified); + } + + public static void BeginMove(MoveItemHandler moveItemHandler) + { + s_CurrentMoveItemHandler = moveItemHandler; + moveMode.BeginMove(s_CurrentMoveItemHandler.movingItems); + } + + public static void UpdateMove() + { + moveMode.UpdateMove(s_CurrentMoveItemHandler.movingItems); + } + + public static void OnTrackDetach(IEnumerable grabbedTrackItems) + { + moveMode.OnTrackDetach(grabbedTrackItems); + } + + public static void HandleTrackSwitch(IEnumerable grabbedTrackItems) + { + moveMode.HandleTrackSwitch(grabbedTrackItems); + } + + public static bool AllowTrackSwitch() + { + return moveMode.AllowTrackSwitch(); + } + + public static double AdjustStartTime(WindowState state, ItemsPerTrack itemsGroup, double time) + { + return moveMode.AdjustStartTime(state, itemsGroup, time); + } + + public static bool ValidateDrag(ItemsPerTrack itemsGroup) + { + return moveMode.ValidateMove(itemsGroup); + } + + public static void DrawMoveGUI(WindowState state, IEnumerable movingItems) + { + moveDrawer.DrawGUI(state, movingItems, modeColor); + } + + public static void FinishMove() + { + var manipulatedItemsList = s_CurrentMoveItemHandler.movingItems; + moveMode.FinishMove(manipulatedItemsList); + + foreach (var itemsGroup in manipulatedItemsList) + foreach (var item in itemsGroup.items) + item.parentTrack = itemsGroup.targetTrack; + + s_CurrentMoveItemHandler = null; + + TimelineCursors.ClearCursor(); + ClearEditMode(); + + TimelineEditor.Refresh(RefreshReason.ContentsModified); + } + + public static void FinalizeInsertItemsAtTime(IEnumerable newItems, double requestedTime) + { + addDeleteMode.InsertItemsAtTime(newItems, requestedTime); + } + + public static void PrepareItemsDelete(IEnumerable newItems) + { + addDeleteMode.RemoveItems(newItems); + } + + public static void HandleModeClutch() + { + if (Event.current.type == EventType.KeyDown && EditorGUI.IsEditingTextField()) + return; + + var prevType = editType; + + if (Event.current.type == EventType.KeyDown) + { + var clutchEditType = GetSubEditType(Event.current.keyCode); + if (clutchEditType != EditType.None) + { + s_OverrideEditType = clutchEditType; + Event.current.Use(); + } + } + else if (Event.current.type == EventType.KeyUp) + { + var clutchEditType = GetSubEditType(Event.current.keyCode); + if (clutchEditType == s_OverrideEditType) + { + s_OverrideEditType = EditType.None; + Event.current.Use(); + } + } + + if (prevType != editType) + { + if (s_CurrentTrimItem != null) + { + trimMode.OnBeforeTrim(s_CurrentTrimItem, s_CurrentTrimDirection); + } + else if (s_CurrentMoveItemHandler != null) + { + if (s_CurrentMoveItemHandler.movingItems == null) + { + s_CurrentMoveItemHandler = null; + return; + } + + foreach (var movingItems in s_CurrentMoveItemHandler.movingItems) + { + if (movingItems != null && movingItems.HasAnyDetachedParents()) + { + foreach (var items in movingItems.items) + { + items.parentTrack = movingItems.originalTrack; + } + } + } + + var movingSelection = s_CurrentMoveItemHandler.movingItems; + + // Handle clutch key transition if needed + GetSubEditMode(prevType).moveItemMode.OnModeClutchExit(movingSelection); + moveMode.OnModeClutchEnter(movingSelection); + + moveMode.BeginMove(movingSelection); + moveMode.HandleTrackSwitch(movingSelection); + + UpdateMove(); + s_CurrentMoveItemHandler.RefreshPreviewItems(); + + TimelineWindow.instance.state.rebuildGraph = true; // TODO Rebuild only if parent changed + } + + TimelineWindow.instance.Repaint(); // TODO Refresh the toolbar without doing a full repaint? + } + } + } +} -- cgit v1.2.3