diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs | |
| download | Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2 Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip | |
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs new file mode 100644 index 0000000..b957f33 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs @@ -0,0 +1,218 @@ +using System.Linq; +using UnityEditor.IMGUI.Controls; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UnityEditor.Timeline +{ + abstract class TimelineTrackBaseGUI : TreeViewItem, IBounds + { + static class Styles + { + public static readonly GUIContent s_LockedAndMuted = EditorGUIUtility.TrTextContent("Locked / Muted"); + public static readonly GUIContent s_LockedAndPartiallyMuted = EditorGUIUtility.TrTextContent("Locked / Partially Muted"); + public static readonly GUIContent s_Locked = EditorGUIUtility.TrTextContent("Locked"); + public static readonly GUIContent s_Muted = EditorGUIUtility.TrTextContent("Muted"); + public static readonly GUIContent s_PartiallyMuted = EditorGUIUtility.TrTextContent("Partially Muted"); + + public static readonly Texture2D lockBg = DirectorStyles.GetBackgroundImage(DirectorStyles.Instance.lockedBG); + } + + protected bool m_IsRoot = false; + protected const float k_ButtonSize = 16.0f; + + readonly TimelineTreeViewGUI m_TreeViewGUI; + readonly TrackDrawer m_Drawer; + + public Vector2 treeViewToWindowTransformation { get; set; } + public bool isExpanded { get; set; } + public bool isDropTarget { protected get; set; } + public TrackAsset track { get; } + TreeViewController treeView { get; } + + public TimelineWindow TimelineWindow + { + get + { + if (m_TreeViewGUI == null) + return null; + + return m_TreeViewGUI.TimelineWindow; + } + } + + public TrackDrawer drawer + { + get { return m_Drawer; } + } + + public virtual float GetVerticalSpacingBetweenTracks() + { + return 3.0f; + } + + public bool visibleRow { get; set; } // is the header row visible + public bool visibleExpanded { get; set; } // is the expanded area (group) visible + public bool drawInsertionMarkerBefore { get; set; } + public bool drawInsertionMarkerAfter { get; set; } + + public abstract Rect boundingRect { get; } + public abstract bool expandable { get; } + public abstract void Draw(Rect headerRect, Rect contentRect, WindowState state); + public abstract void OnGraphRebuilt(); // callback when the corresponding graph is rebuilt. This can happen, but not have the GUI rebuilt. + + protected TimelineTrackBaseGUI(int id, int depth, TreeViewItem parent, string displayName, TrackAsset trackAsset, TreeViewController tv, TimelineTreeViewGUI tvgui) + : base(id, depth, parent, displayName) + { + m_Drawer = TrackDrawer.CreateInstance(trackAsset); + m_Drawer.sequencerState = tvgui.TimelineWindow.state; + + isExpanded = false; + isDropTarget = false; + track = trackAsset; + treeView = tv; + + m_TreeViewGUI = tvgui; + } + + public static TimelineTrackBaseGUI FindGUITrack(TrackAsset track) + { + var allTracks = TimelineWindow.instance.allTracks; + return allTracks.Find(x => x.track == track); + } + + protected void DrawTrackState(Rect trackRect, Rect expandedRect, TrackAsset track) + { + if (Event.current.type == EventType.Layout) + { + bool needStateBox = false; + + //Mute + if (track.muted && !TimelineUtility.IsParentMuted(track)) + { + Rect bgRect = expandedRect; + TimelineWindow.instance.OverlayDrawData.Add(TimelineWindow.OverlayData.CreateColorOverlay(GUIClip.Unclip(bgRect), DirectorStyles.Instance.customSkin.colorTrackDarken)); + needStateBox = true; + } + + //Lock + if (!needStateBox && track.locked && !TimelineUtility.IsLockedFromGroup(track)) + { + Rect bgRect = expandedRect; + TimelineWindow.instance.OverlayDrawData.Add(TimelineWindow.OverlayData.CreateTextureOverlay(GUIClip.Unclip(bgRect), Styles.lockBg)); + needStateBox = true; + } + + if (needStateBox) + { + DrawTrackStateBox(trackRect, track); + } + } + } + + void DrawTrackStateBox(Rect trackRect, TrackAsset track) + { + const float k_LockTextPadding = 40f; + var styles = DirectorStyles.Instance; + + bool locked = track.locked && !TimelineUtility.IsLockedFromGroup(track); + bool muted = track.muted && !TimelineUtility.IsParentMuted(track); + bool allSubTrackMuted = TimelineUtility.IsAllSubTrackMuted(track); + + GUIContent content = null; + if (locked && muted) + { + content = Styles.s_LockedAndMuted; + if (!allSubTrackMuted) + content = Styles.s_LockedAndPartiallyMuted; + } + else if (locked) content = Styles.s_Locked; + else if (muted) + { + content = Styles.s_Muted; + if (!allSubTrackMuted) + content = Styles.s_PartiallyMuted; + } + + // the track could be locked, but we only show the 'locked portion' on the upper most track + // that is causing the lock + if (content == null) + return; + + var textRect = trackRect; + textRect.width = styles.fontClip.CalcSize(content).x + k_LockTextPadding; + textRect.x += (trackRect.width - textRect.width) / 2f; + textRect.height -= 4f; + textRect.y += 2f; + + + TimelineWindow.instance.OverlayDrawData.Add(TimelineWindow.OverlayData.CreateTextBoxOverlay(GUIClip.Unclip(textRect), content.text, styles.fontClip, Color.white, styles.customSkin.colorLockTextBG, styles.displayBackground)); + } + + protected float DrawMuteButton(Rect rect, WindowState state) + { + if (track.mutedInHierarchy) + { + using (new EditorGUI.DisabledScope(TimelineUtility.IsParentMuted(track))) + { + if (GUI.Button(rect, GUIContent.none, TimelineWindow.styles.mute)) + { + MuteTrack.Mute(state, new[] { track }, false); + } + } + + return WindowConstants.trackHeaderButtonSize; + } + + return 0.0f; + } + + protected float DrawLockButton(Rect rect, WindowState state) + { + if (track.lockedInHierarchy) + { + // if the parent is locked, show it the lock disabled + using (new EditorGUI.DisabledScope(TimelineUtility.IsLockedFromGroup(track))) + { + if (GUI.Button(rect, GUIContent.none, TimelineWindow.styles.locked)) + { + LockTrack.SetLockState(new[] { track }, !track.locked, state); + } + } + + return WindowConstants.trackHeaderButtonSize; + } + + return 0.0f; + } + + public void DrawInsertionMarkers(Rect rowRectWithIndent) + { + const float insertionHeight = WindowConstants.trackInsertionMarkerHeight; + if (Event.current.type == EventType.Repaint && (drawInsertionMarkerAfter || drawInsertionMarkerBefore)) + { + if (drawInsertionMarkerBefore) + { + var rect = new Rect(rowRectWithIndent.x, rowRectWithIndent.y - insertionHeight * 0.5f - 2.0f, rowRectWithIndent.width, insertionHeight); + EditorGUI.DrawRect(rect, Color.white); + } + + if (drawInsertionMarkerAfter) + { + var rect = new Rect(rowRectWithIndent.x, rowRectWithIndent.y + rowRectWithIndent.height - insertionHeight * 0.5f + 1.0f, rowRectWithIndent.width, insertionHeight); + EditorGUI.DrawRect(rect, Color.white); + } + } + } + + public void ClearDrawFlags() + { + if (Event.current.type == EventType.Repaint) + { + isDropTarget = false; + drawInsertionMarkerAfter = false; + drawInsertionMarkerBefore = false; + } + } + } +} |
