public static TimelineMarker DuplicateAtTime(TimelineMarker theMarker, TrackAsset track, PlayableDirector directorComponent, double newTime)
        {
            TrackAsset trackAsset = theMarker.parentTrack;

            if (track != null)
            {
                trackAsset = track;
            }
            ITimelineMarkerContainer timelineMarkerContainer = trackAsset as ITimelineMarkerContainer;
            TimelineMarker           result;

            if (timelineMarkerContainer == null || trackAsset.timelineAsset == null)
            {
                result = null;
            }
            else if (double.IsInfinity(newTime))
            {
                result = null;
            }
            else
            {
                result = timelineMarkerContainer.CreateMarker(theMarker.key, newTime);
            }
            return(result);
        }
        private void CreateExistingMarker(string key, ITimelineMarkerContainer container, ITimelineState state)
        {
            Vector3 mousePosition = (this.trackMenuContext.clipTimeCreation != TrackDrawer.TrackMenuContext.ClipTimeCreation.Mouse) ? TimelineHelpers.sInvalidMousePosition : this.trackMenuContext.mousePosition;
            double  time          = TrackDrawer.CalculateMarkerTimeForMousePosition(container as TrackAsset, state, mousePosition);

            TimelineUndo.PushUndo(container as Object, "Create Marker");
            TimelineMarker newEvent = container.CreateMarker(key, time);

            TrackDrawer.SelectMarkerInInspector(state, newEvent);
            state.Refresh();
        }