Beispiel #1
0
        public ClipsLayer(Layer layerOrder, IRowGUI parent) : base(layerOrder)
        {
            var track = parent.asset;

            track.SortClips();
            TimelineClipGUI previousClipGUI = null;

            foreach (var clip in track.clips)
            {
                var oldClipGUI = ItemToItemGui.GetGuiForClip(clip);
                var isInvalid  = oldClipGUI != null && oldClipGUI.isInvalid; // HACK Make sure to carry invalidy state when refereshing the cache.

                var currentClipGUI = new TimelineClipGUI(clip, parent, this)
                {
                    isInvalid = isInvalid
                };
                if (previousClipGUI != null)
                {
                    previousClipGUI.nextClip = currentClipGUI;
                }
                currentClipGUI.previousClip = previousClipGUI;
                AddItem(currentClipGUI);
                previousClipGUI = currentClipGUI;
            }
        }
Beispiel #2
0
        public static CurveDataSource Create(IRowGUI trackGUI)
        {
            if (trackGUI.asset is AnimationTrack)
            {
                return(new InfiniteClipCurveDataSource(trackGUI));
            }

            return(new TrackParametersCurveDataSource(trackGUI));
        }
Beispiel #3
0
 void BuildGUICache(IRowGUI parent)
 {
     m_ClipsLayer = new ClipsLayer(0, parent);
     m_Layers     = new List <ItemsLayer>
     {
         m_ClipsLayer,
         new MarkersLayer(1, parent)
     };
 }
Beispiel #4
0
 void BuildGUICache(IRowGUI parent)
 {
     m_ClipsLayer = new ClipsLayer(Layer.Clips, parent);
     m_Layers     = new List <ILayer>
     {
         m_ClipsLayer,
         new MarkersLayer(Layer.Markers, parent)
     };
 }
 public TimelineMarkerClusterGUI(List <TimelineMarkerGUI> guis, IRowGUI parent,
                                 IZOrderProvider zOrderProvider, LayerZOrder layerZOrder)
     : base(parent)
 {
     m_MarkerGUIs     = guis;
     m_ZOrderProvider = zOrderProvider;
     zOrder           = layerZOrder;
     SortMarkers();
     topMarker.onStartDrag += OnDragTopMarker;
 }
Beispiel #6
0
        void CreateLists(IRowGUI parent)
        {
            var markerCount = parent.asset.GetMarkerCount();

            if (markerCount == 0)
            {
                return;
            }

            var accumulator   = new List <IMarker>();
            var sortedMarkers = new List <IMarker>(parent.asset.GetMarkers());
            var vm            = TimelineWindowViewPrefs.GetTrackViewModelData(parent.asset);

            sortedMarkers.Sort((lhs, rhs) =>
            {
                // Sort by time first
                var timeComparison = lhs.time.CompareTo(rhs.time);
                if (timeComparison != 0)
                {
                    return(timeComparison);
                }

                // If there's a collision, sort by edit timestamp
                var lhsObject = lhs as object;
                var rhsObject = rhs as object;

                if (lhsObject.Equals(null) || rhsObject.Equals(null))
                {
                    return(0);
                }

                var lhsHash = lhsObject.GetHashCode();
                var rhsHash = rhsObject.GetHashCode();

                if (vm.markerTimeStamps.ContainsKey(lhsHash) && vm.markerTimeStamps.ContainsKey(rhsHash))
                {
                    return(vm.markerTimeStamps[lhsHash].CompareTo(vm.markerTimeStamps[rhsHash]));
                }

                return(0);
            });

            foreach (var current in sortedMarkers)
            {
                // TODO: Take zoom factor into account?
                if (accumulator.Count > 0 && Math.Abs(current.time - accumulator[accumulator.Count - 1].time) > TimeUtility.kTimeEpsilon)
                {
                    ProcessAccumulator(accumulator, parent);
                }

                accumulator.Add(current);
            }

            ProcessAccumulator(accumulator, parent);
        }
        public TimelineClipGUI(TimelineClip clip, IRowGUI parent, IZOrderProvider provider) : base(parent)
        {
            zOrderProvider = provider;
            zOrder         = provider.Next();

            m_EditorItem = EditorClipFactory.GetEditorClip(clip);
            m_ClipEditor = CustomTimelineEditorCache.GetClipEditor(clip);

            supportResize = true;

            leftHandle  = new TimelineClipHandle(this, TrimEdge.Start);
            rightHandle = new TimelineClipHandle(this, TrimEdge.End);

            ItemToItemGui.Add(clip, this);
        }
        public TimelineClipGUI(TimelineClip clip, IRowGUI parent, IZOrderProvider provider) : base(parent)
        {
            zOrderProvider = provider;
            zOrder         = provider.Next();

            m_EditorItem = EditorClipFactory.GetEditorClip(clip);

            clip.dirtyHash = 0;

            supportResize = true;

            m_LeftHandle  = new TimelineClipHandle(this, TrimEdge.Start);
            m_RightHandle = new TimelineClipHandle(this, TrimEdge.End);

            ItemToItemGui.Add(clip, this);
        }
Beispiel #9
0
        public TimelineMarkerGUI(IMarker theMarker, IRowGUI parent, IZOrderProvider provider) : base(parent)
        {
            marker       = theMarker;
            m_Selectable = marker.GetType().IsSubclassOf(typeof(UnityObject));

            m_MarkerHash = 0;
            var o = marker as object;

            if (!o.Equals(null))
            {
                m_MarkerHash = o.GetHashCode();
            }

            zOrderProvider = provider;
            zOrder         = zOrderProvider.Next();
            ItemToItemGui.Add(marker, this);
        }
Beispiel #10
0
        void ProcessAccumulator(List <IMarker> accumulator, IRowGUI parent)
        {
            if (accumulator.Count == 0)
            {
                return;
            }

            if (accumulator.Count == 1)
            {
                AddItem(new TimelineMarkerGUI(accumulator[0], parent, this));
            }
            else
            {
                // Ensure that the cluster is always considered *below* the markers it contains.
                var clusterZOrder = Next();
                AddItem(
                    new TimelineMarkerClusterGUI(
                        accumulator.Select(m => new TimelineMarkerGUI(m, parent, this)).ToList(),
                        parent, this, clusterZOrder));
            }

            accumulator.Clear();
        }
Beispiel #11
0
 public InfiniteClipCurveDataSource(IRowGUI trackGui) : base(trackGui)
 {
     m_AnimationTrack = trackGui.asset as AnimationTrack;
 }
Beispiel #12
0
 public TrackItemsDrawer(IRowGUI parent)
 {
     m_Layers     = null;
     m_ClipsLayer = null;
     BuildGUICache(parent);
 }
Beispiel #13
0
 public MarkersLayer(Layer layerOrder, IRowGUI parent) : base(layerOrder)
 {
     CreateLists(parent);
 }
 protected TimelineItemGUI(IRowGUI parent)
 {
     this.parent = parent;
     m_Styles    = DirectorStyles.Instance;
 }
Beispiel #15
0
 public TrackParametersCurveDataSource(IRowGUI trackGui) : base(trackGui)
 {
     m_CurvesProxy = new CurvesProxy(trackGui.asset);
 }
Beispiel #16
0
 public TrackItemsDrawer(IRowGUI parent)
 {
     BuildGUICache(parent);
 }
 protected CurveDataSource(IRowGUI trackGUI)
 {
     m_TrackGUI = trackGUI;
 }