ClipsLayer.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.Timeline;
  4. namespace UnityEditor.Timeline
  5. {
  6. class ClipsLayer : ItemsLayer<TimelineClipGUI>
  7. {
  8. static readonly GUIStyle k_ConnectorIcon = DirectorStyles.Instance.connector;
  9. public ClipsLayer(Layer layerOrder, IRowGUI parent) : base(layerOrder)
  10. {
  11. var track = parent.asset;
  12. track.SortClips();
  13. TimelineClipGUI previousClipGUI = null;
  14. foreach (var clip in track.clips)
  15. {
  16. var oldClipGUI = ItemToItemGui.GetGuiForClip(clip);
  17. var isInvalid = oldClipGUI != null && oldClipGUI.isInvalid; // HACK Make sure to carry invalidy state when refereshing the cache.
  18. var currentClipGUI = new TimelineClipGUI(clip, parent, this) {isInvalid = isInvalid};
  19. if (previousClipGUI != null) previousClipGUI.nextClip = currentClipGUI;
  20. currentClipGUI.previousClip = previousClipGUI;
  21. AddItem(currentClipGUI);
  22. previousClipGUI = currentClipGUI;
  23. }
  24. }
  25. public override void Draw(Rect rect, WindowState state)
  26. {
  27. base.Draw(rect, state); //draw clips
  28. DrawConnector(items);
  29. }
  30. static void DrawConnector(List<TimelineClipGUI> clips)
  31. {
  32. if (Event.current.type != EventType.Repaint)
  33. return;
  34. foreach (var clip in clips)
  35. {
  36. if (clip.previousClip != null && clip.visible && clip.treeViewRect.width > 14 &&
  37. (DiscreteTime)clip.start == (DiscreteTime)clip.previousClip.end)
  38. {
  39. // draw little connector widget
  40. var localRect = clip.treeViewRect;
  41. localRect.x -= Mathf.Floor(k_ConnectorIcon.fixedWidth / 2.0f);
  42. localRect.width = k_ConnectorIcon.fixedWidth;
  43. localRect.height = k_ConnectorIcon.fixedHeight;
  44. GUI.Label(localRect, GUIContent.none, k_ConnectorIcon);
  45. }
  46. }
  47. }
  48. }
  49. }