summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs137
1 files changed, 137 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs
new file mode 100644
index 0000000..1620269
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs
@@ -0,0 +1,137 @@
+using System;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ class MovingItems : ItemsPerTrack
+ {
+ TrackAsset m_ReferenceTrack;
+ readonly bool m_AllowTrackSwitch;
+
+ readonly Rect[] m_ItemsBoundsOnTrack;
+ readonly Vector2[] m_ItemsMouseOffsets;
+
+ static readonly Rect s_InvisibleBounds = new Rect(float.MaxValue, float.MaxValue, 0.0f, 0.0f);
+
+ public TrackAsset originalTrack { get; }
+
+ public override TrackAsset targetTrack
+ {
+ get
+ {
+ if (m_AllowTrackSwitch)
+ return m_ReferenceTrack;
+
+ return originalTrack;
+ }
+ }
+
+ public bool canDrop;
+
+ public double start
+ {
+ get { return m_ItemsGroup.start; }
+ set { m_ItemsGroup.start = value; }
+ }
+
+ public double end
+ {
+ get { return m_ItemsGroup.end; }
+ }
+
+ public Rect[] onTrackItemsBounds
+ {
+ get { return m_ItemsBoundsOnTrack; }
+ }
+
+ public MovingItems(WindowState state, TrackAsset parentTrack, ITimelineItem[] items, TrackAsset referenceTrack, Vector2 mousePosition, bool allowTrackSwitch)
+ : base(parentTrack, items)
+ {
+ originalTrack = parentTrack;
+ m_ReferenceTrack = referenceTrack;
+ m_AllowTrackSwitch = allowTrackSwitch;
+
+ m_ItemsBoundsOnTrack = new Rect[items.Length];
+ m_ItemsMouseOffsets = new Vector2[items.Length];
+
+ for (int i = 0; i < items.Length; ++i)
+ {
+ var itemGUi = items[i].gui;
+
+ if (itemGUi != null)
+ {
+ m_ItemsBoundsOnTrack[i] = itemGUi.rect;
+ m_ItemsMouseOffsets[i] = mousePosition - m_ItemsBoundsOnTrack[i].position;
+ }
+ }
+
+ canDrop = true;
+ }
+
+ public void SetReferenceTrack(TrackAsset track)
+ {
+ m_ReferenceTrack = track;
+ }
+
+ public bool HasAnyDetachedParents()
+ {
+ return m_ItemsGroup.items.Any(x => x.parentTrack == null);
+ }
+
+ public void RefreshBounds(WindowState state, Vector2 mousePosition)
+ {
+ for (int i = 0; i < m_ItemsGroup.items.Length; ++i)
+ {
+ var item = m_ItemsGroup.items[i];
+ var itemGUI = item.gui;
+
+ if (item.parentTrack != null)
+ {
+ m_ItemsBoundsOnTrack[i] = itemGUI.visible ? itemGUI.rect : s_InvisibleBounds;
+ }
+ else
+ {
+ if (targetTrack != null)
+ {
+ var trackGUI = (TimelineTrackGUI)TimelineWindow.instance.allTracks.FirstOrDefault(t => t.track == targetTrack);
+ if (trackGUI == null) return;
+ var trackRect = trackGUI.boundingRect;
+ m_ItemsBoundsOnTrack[i] = itemGUI.RectToTimeline(trackRect, state);
+ }
+ else
+ {
+ m_ItemsBoundsOnTrack[i].position = mousePosition - m_ItemsMouseOffsets[i];
+ }
+ }
+ }
+ }
+
+ public void Draw(bool isValid)
+ {
+ for (int i = 0; i < m_ItemsBoundsOnTrack.Length; ++i)
+ {
+ var rect = m_ItemsBoundsOnTrack[i];
+ DrawItemInternal(m_ItemsGroup.items[i], rect, isValid);
+ }
+ }
+
+ static void DrawItemInternal(ITimelineItem item, Rect rect, bool isValid)
+ {
+ var clipGUI = item.gui as TimelineClipGUI;
+
+ if (clipGUI != null)
+ {
+ if (isValid)
+ {
+ clipGUI.DrawGhostClip(rect);
+ }
+ else
+ {
+ clipGUI.DrawInvalidClip(rect);
+ }
+ }
+ }
+ }
+}