summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs23
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs.meta11
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs102
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs.meta11
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs139
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs.meta11
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs97
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs.meta11
8 files changed, 405 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs
new file mode 100644
index 0000000..9286600
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+
+namespace UnityEditor.Timeline
+{
+ enum TrimEdge
+ {
+ Start,
+ End
+ }
+
+ interface ITrimItemMode
+ {
+ void OnBeforeTrim(ITrimmable item, TrimEdge trimDirection);
+
+ void TrimStart(ITrimmable item, double time);
+ void TrimEnd(ITrimmable item, double time, bool affectTimeScale);
+ }
+
+ interface ITrimItemDrawer
+ {
+ void DrawGUI(WindowState state, Rect bounds, Color color, TrimEdge edge);
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs.meta
new file mode 100644
index 0000000..0dc6ddc
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b4a5ce78107bc38409a3bb5e8b3289ac
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs
new file mode 100644
index 0000000..7232c29
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ class TrimItemModeMix : ITrimItemMode, ITrimItemDrawer
+ {
+ ITrimmable m_Item;
+
+ double m_Min;
+ double m_Max;
+
+ public void OnBeforeTrim(ITrimmable item, TrimEdge trimDirection)
+ {
+ m_Item = item;
+
+ var sortedItems = ItemsUtils.GetItemsExcept(item.parentTrack, new[] {item})
+ .OfType<ITrimmable>()
+ .OrderBy(c => c.start);
+
+ var itemStart = (DiscreteTime)item.start;
+ var itemEnd = (DiscreteTime)item.end;
+
+ var overlapped = sortedItems.LastOrDefault(c => (DiscreteTime)c.start == itemStart && (DiscreteTime)c.end == itemEnd);
+
+ ITrimmable nextItem;
+ ITrimmable prevItem;
+
+ m_Min = 0.0;
+ m_Max = double.PositiveInfinity;
+
+ var blendableItem = item as IBlendable;
+ if (blendableItem != null && blendableItem.supportsBlending)
+ {
+ if (trimDirection == TrimEdge.Start)
+ {
+ nextItem = sortedItems.FirstOrDefault(c => (DiscreteTime)c.start >= itemStart && (DiscreteTime)c.end > itemEnd);
+ prevItem = sortedItems.LastOrDefault(c => (DiscreteTime)c.start <= itemStart && (DiscreteTime)c.end < itemEnd);
+
+ if (prevItem != null)
+ m_Min = prevItem.start + EditModeUtils.BlendDuration(prevItem, TrimEdge.Start);
+
+ if (nextItem != null)
+ m_Max = nextItem.start;
+ }
+ else
+ {
+ nextItem = sortedItems.FirstOrDefault(c => c != overlapped && (DiscreteTime)c.start >= itemStart && (DiscreteTime)c.end >= itemEnd);
+ prevItem = sortedItems.LastOrDefault(c => c != overlapped && (DiscreteTime)c.start <= itemStart && (DiscreteTime)c.end <= itemEnd);
+
+ if (prevItem != null)
+ m_Min = prevItem.end;
+
+ if (nextItem != null)
+ m_Max = nextItem.end - EditModeUtils.BlendDuration(nextItem, TrimEdge.End);
+ }
+ }
+ else
+ {
+ nextItem = sortedItems.FirstOrDefault(c => (DiscreteTime)c.start > itemStart);
+ prevItem = sortedItems.LastOrDefault(c => (DiscreteTime)c.start < itemStart);
+
+ if (prevItem != null)
+ m_Min = prevItem.end;
+
+ if (nextItem != null)
+ m_Max = nextItem.start;
+ }
+ }
+
+ public void TrimStart(ITrimmable item, double time)
+ {
+ time = Math.Min(Math.Max(time, m_Min), m_Max);
+ item.SetStart(time);
+ }
+
+ public void TrimEnd(ITrimmable item, double time, bool affectTimeScale)
+ {
+ time = Math.Min(Math.Max(time, m_Min), m_Max);
+ item.SetEnd(time, affectTimeScale);
+ }
+
+ public void DrawGUI(WindowState state, Rect bounds, Color color, TrimEdge edge)
+ {
+ if (EditModeUtils.HasBlends(m_Item, edge))
+ {
+ EditModeGUIUtils.DrawBoundsEdge(bounds, color, edge);
+ var cursorType = (edge == TrimEdge.End)
+ ? TimelineCursors.CursorType.MixRight
+ : TimelineCursors.CursorType.MixLeft;
+
+ TimelineCursors.SetCursor(cursorType);
+ }
+ else
+ {
+ TimelineCursors.ClearCursor();
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs.meta
new file mode 100644
index 0000000..cac1412
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ddd9f7d3cce6724696a33752ab2f5a4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs
new file mode 100644
index 0000000..4cc798c
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs
@@ -0,0 +1,139 @@
+using System;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ class TrimItemModeReplace : ITrimItemMode, ITrimItemDrawer
+ {
+ ITrimmable m_Item;
+
+ ITrimmable m_ItemToBeReplaced;
+ double m_ClipOriginalEdgeValue;
+ bool m_TrimReplace;
+
+ double m_Min;
+ double m_Max;
+
+ public void OnBeforeTrim(ITrimmable item, TrimEdge trimDirection)
+ {
+ m_Item = item;
+
+ var sortedClips = ItemsUtils.GetItemsExcept(item.parentTrack, new[] { item })
+ .OfType<ITrimmable>()
+ .OrderBy(c => c.start);
+
+ var clipStart = (DiscreteTime)item.start;
+ var clipEnd = (DiscreteTime)item.end;
+
+ var overlapped = sortedClips.LastOrDefault(c => (DiscreteTime)c.start == clipStart && (DiscreteTime)c.end == clipEnd);
+
+ ITrimmable nextItem;
+ ITrimmable prevItem;
+
+ m_Min = 0.0;
+ m_Max = double.PositiveInfinity;
+
+ if (trimDirection == TrimEdge.Start)
+ {
+ nextItem = sortedClips.FirstOrDefault(c => (DiscreteTime)c.start >= clipStart && (DiscreteTime)c.end > clipEnd);
+ prevItem = sortedClips.LastOrDefault(c => (DiscreteTime)c.start <= clipStart && (DiscreteTime)c.end < clipEnd);
+
+ if (prevItem != null)
+ m_Min = prevItem.start + EditModeUtils.BlendDuration(prevItem, TrimEdge.Start) + TimelineClip.kMinDuration;
+
+ if (nextItem != null)
+ m_Max = nextItem.start;
+
+ m_ItemToBeReplaced = prevItem;
+
+ if (m_ItemToBeReplaced != null)
+ m_ClipOriginalEdgeValue = m_ItemToBeReplaced.end;
+ }
+ else
+ {
+ nextItem = sortedClips.FirstOrDefault(c => c != overlapped && (DiscreteTime)c.start >= clipStart && (DiscreteTime)c.end >= clipEnd);
+ prevItem = sortedClips.LastOrDefault(c => c != overlapped && (DiscreteTime)c.start <= clipStart && (DiscreteTime)c.end <= clipEnd);
+
+ if (prevItem != null)
+ m_Min = prevItem.end;
+
+ if (nextItem != null)
+ m_Max = nextItem.end - EditModeUtils.BlendDuration(nextItem, TrimEdge.End) - TimelineClip.kMinDuration;
+
+ m_ItemToBeReplaced = nextItem;
+
+ if (m_ItemToBeReplaced != null)
+ m_ClipOriginalEdgeValue = m_ItemToBeReplaced.start;
+ }
+
+ m_TrimReplace = false;
+ }
+
+ public void TrimStart(ITrimmable item, double time)
+ {
+ time = Math.Min(Math.Max(time, m_Min), m_Max);
+
+ if (m_ItemToBeReplaced != null)
+ {
+ if (!m_TrimReplace)
+ m_TrimReplace = item.start >= m_ItemToBeReplaced.end;
+ }
+
+ time = Math.Max(time, 0.0);
+
+ item.SetStart(time);
+
+ if (m_ItemToBeReplaced != null && m_TrimReplace)
+ {
+ var prevEnd = Math.Min(item.start, m_ClipOriginalEdgeValue);
+ m_ItemToBeReplaced.SetEnd(prevEnd, false);
+ }
+ }
+
+ public void TrimEnd(ITrimmable item, double time, bool affectTimeScale)
+ {
+ time = Math.Min(Math.Max(time, m_Min), m_Max);
+
+ if (m_ItemToBeReplaced != null)
+ {
+ if (!m_TrimReplace)
+ m_TrimReplace = item.end <= m_ItemToBeReplaced.start;
+ }
+
+ item.SetEnd(time, affectTimeScale);
+
+ if (m_ItemToBeReplaced != null && m_TrimReplace)
+ {
+ var nextStart = Math.Max(item.end, m_ClipOriginalEdgeValue);
+ m_ItemToBeReplaced.SetStart(nextStart);
+ }
+ }
+
+ public void DrawGUI(WindowState state, Rect bounds, Color color, TrimEdge edge)
+ {
+ bool shouldDraw = m_ItemToBeReplaced != null && (edge == TrimEdge.End && m_Item.end > m_ClipOriginalEdgeValue) ||
+ (edge == TrimEdge.Start && m_Item.start < m_ClipOriginalEdgeValue);
+
+ if (shouldDraw)
+ {
+ var cursorType = TimelineCursors.CursorType.Replace;
+ if (EditModeUtils.HasBlends(m_Item, edge))
+ {
+ color = DirectorStyles.kMixToolColor;
+ cursorType = (edge == TrimEdge.End)
+ ? TimelineCursors.CursorType.MixRight
+ : TimelineCursors.CursorType.MixLeft;
+ }
+
+ EditModeGUIUtils.DrawBoundsEdge(bounds, color, edge);
+ TimelineCursors.SetCursor(cursorType);
+ }
+ else
+ {
+ TimelineCursors.ClearCursor();
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs.meta
new file mode 100644
index 0000000..a68744e
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 769f6f5dd7c8f2d4c9ab1caba0bd2628
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs
new file mode 100644
index 0000000..1cce7a6
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs
@@ -0,0 +1,97 @@
+using System;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ class TrimItemModeRipple : ITrimItemMode, ITrimItemDrawer
+ {
+ double m_OriginalClipStart;
+ double m_OriginalClipEnd;
+
+ ITrimmable[] m_NextItems;
+
+ double m_BlendDuration;
+
+ double m_TrimStartShift;
+
+ public void OnBeforeTrim(ITrimmable item, TrimEdge trimDirection)
+ {
+ m_OriginalClipStart = item.start;
+ m_OriginalClipEnd = item.end;
+ m_TrimStartShift = 0.0;
+
+ var sortedClips = ItemsUtils.GetItemsExcept(item.parentTrack, new[] { item })
+ .OfType<ITrimmable>()
+ .OrderBy(c => c.start);
+
+ var clipStart = (DiscreteTime)item.start;
+ var clipEnd = (DiscreteTime)item.end;
+
+ m_NextItems = sortedClips.Where(c => (DiscreteTime)c.start >= clipStart && (DiscreteTime)c.end >= clipEnd).ToArray();
+
+ var overlapped = sortedClips.LastOrDefault(c => (DiscreteTime)c.start == clipStart && (DiscreteTime)c.end == clipEnd);
+
+ if (overlapped != null)
+ {
+ m_BlendDuration = overlapped.end - overlapped.start;
+ }
+ else
+ {
+ m_BlendDuration = 0.0;
+
+ var prevClip = sortedClips.LastOrDefault(c => (DiscreteTime)c.start <= clipStart && (DiscreteTime)c.end <= clipEnd);
+ if (prevClip != null)
+ m_BlendDuration += Math.Max(prevClip.end - item.start, 0.0);
+
+ var nextClip = sortedClips.FirstOrDefault(c => (DiscreteTime)c.start >= clipStart && (DiscreteTime)c.end >= clipEnd);
+ if (nextClip != null)
+ m_BlendDuration += Math.Max(item.end - nextClip.start, 0.0);
+ }
+ }
+
+ public void TrimStart(ITrimmable item, double time)
+ {
+ var prevEnd = item.end;
+
+ // HACK If time is negative, make sure we shift the SetStart operation to a positive space.
+ if (time < 0.0)
+ m_TrimStartShift = Math.Max(-time, m_TrimStartShift);
+
+ item.start = m_OriginalClipEnd - item.duration + m_TrimStartShift;
+ time += m_TrimStartShift;
+
+ if (m_BlendDuration > 0.0)
+ time = Math.Min(time, item.end - m_BlendDuration);
+
+ item.SetStart(time);
+
+ item.start = m_OriginalClipStart;
+
+ var offset = item.end - prevEnd;
+ foreach (var timelineClip in m_NextItems)
+ timelineClip.start += offset;
+ }
+
+ public void TrimEnd(ITrimmable item, double time, bool affectTimeScale)
+ {
+ var prevEnd = item.end;
+
+ if (m_BlendDuration > 0.0)
+ time = Math.Max(time, item.start + m_BlendDuration);
+
+ item.SetEnd(time, affectTimeScale);
+
+ var offset = item.end - prevEnd;
+ foreach (var timelineClip in m_NextItems)
+ timelineClip.start += offset;
+ }
+
+ public void DrawGUI(WindowState state, Rect bounds, Color color, TrimEdge edge)
+ {
+ EditModeGUIUtils.DrawBoundsEdge(bounds, color, edge);
+ TimelineCursors.SetCursor(TimelineCursors.CursorType.Ripple);
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs.meta
new file mode 100644
index 0000000..0c58aff
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 20c8bb6b47a526c4c96ca73314fe2856
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: