summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs138
1 files changed, 138 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs
new file mode 100644
index 0000000..d4df368
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs
@@ -0,0 +1,138 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ class MoveItemModeMix : IMoveItemMode, IMoveItemDrawer
+ {
+ public void OnTrackDetach(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ // Nothing
+ }
+
+ public void HandleTrackSwitch(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ foreach (var itemsGroup in itemsGroups)
+ {
+ var targetTrack = itemsGroup.targetTrack;
+ if (targetTrack != null && itemsGroup.items.Any())
+ {
+ var compatible = itemsGroup.items.First().IsCompatibleWithTrack(targetTrack) &&
+ !EditModeUtils.IsInfiniteTrack(targetTrack);
+ var track = compatible ? targetTrack : null;
+
+ if (track != null)
+ TimelineUndo.PushUndo(track, "Move Items");
+
+ EditModeUtils.SetParentTrack(itemsGroup.items, track);
+ }
+ else
+ {
+ EditModeUtils.SetParentTrack(itemsGroup.items, null);
+ }
+ }
+ }
+
+ public bool AllowTrackSwitch()
+ {
+ return true;
+ }
+
+ public double AdjustStartTime(WindowState state, ItemsPerTrack itemsGroup, double time)
+ {
+ return time;
+ }
+
+ public void OnModeClutchEnter(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ // Nothing
+ }
+
+ public void OnModeClutchExit(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ // Nothing
+ }
+
+ public void BeginMove(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ // Nothing
+ }
+
+ public void UpdateMove(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ // Nothing
+ }
+
+ public void FinishMove(IEnumerable<ItemsPerTrack> itemsGroups)
+ {
+ // Nothing
+ }
+
+ public bool ValidateMove(ItemsPerTrack itemsGroup)
+ {
+ var track = itemsGroup.targetTrack;
+ var items = itemsGroup.items;
+
+ if (EditModeUtils.IsInfiniteTrack(track))
+ {
+ double startTime;
+ double stopTime;
+ EditModeUtils.GetInfiniteClipBoundaries(track, out startTime, out stopTime);
+
+ return items.All(item =>
+ !EditModeUtils.IsItemWithinRange(item, startTime, stopTime) &&
+ !EditModeUtils.IsRangeWithinItem(startTime, stopTime, item));
+ }
+
+ var siblings = ItemsUtils.GetItemsExcept(itemsGroup.targetTrack, items);
+ return items.All(item => EditModeMixUtils.GetPlacementValidity(item, siblings) == PlacementValidity.Valid);
+ }
+
+ public void DrawGUI(WindowState state, IEnumerable<MovingItems> movingItems, Color color)
+ {
+ var selectionHasAnyBlendIn = false;
+ var selectionHasAnyBlendOut = false;
+
+ foreach (var grabbedItems in movingItems)
+ {
+ var bounds = grabbedItems.onTrackItemsBounds;
+
+ var counter = 0;
+ foreach (var item in grabbedItems.items.OfType<IBlendable>())
+ {
+ if (item.hasLeftBlend)
+ {
+ EditModeGUIUtils.DrawBoundsEdge(bounds[counter], color, TrimEdge.Start);
+ selectionHasAnyBlendIn = true;
+ }
+
+ if (item.hasRightBlend)
+ {
+ EditModeGUIUtils.DrawBoundsEdge(bounds[counter], color, TrimEdge.End);
+ selectionHasAnyBlendOut = true;
+ }
+ counter++;
+ }
+ }
+
+ if (selectionHasAnyBlendIn && selectionHasAnyBlendOut)
+ {
+ TimelineCursors.SetCursor(TimelineCursors.CursorType.MixBoth);
+ }
+ else if (selectionHasAnyBlendIn)
+ {
+ TimelineCursors.SetCursor(TimelineCursors.CursorType.MixLeft);
+ }
+ else if (selectionHasAnyBlendOut)
+ {
+ TimelineCursors.SetCursor(TimelineCursors.CursorType.MixRight);
+ }
+ else
+ {
+ TimelineCursors.ClearCursor();
+ }
+ }
+ }
+}