internal static void SelectMarkerElement(MarkerElement markerElement, bool multi) { // cycle selection // if already selected and no ctrl key then we should find other marker elements underneath, bring them to the top.. if (markerElement.m_Selected && !multi) { List <MarkerElement> markers = markerElement.m_Track.GetMarkersNearX(markerElement.XPos).ToList(); foreach (MarkerElement marker in markers) { if (marker != markerElement) { SelectMarkerElement(marker, false); return; } } } markerElement.BringToFront(); markerElement.m_Track.m_Owner.Select(markerElement, multi); markerElement.m_Content.style.backgroundColor = markerElement.m_BackgroundColor; markerElement.m_TimelineGuideline.style.backgroundColor = markerElement.m_BackgroundColor; markerElement.style.display = DisplayStyle.Flex; markerElement.m_Selected = true; markerElement.m_Content.MarkDirtyRepaint(); markerElement.Selected?.Invoke(); }
MarkerElement CreateMarkerElement(MarkerAnnotation marker) { var me = new MarkerElement(marker, this); AddElement(me); me.Reposition(); if (m_Owner.SelectionContainer.m_Markers.Contains(marker) && !m_Owner.SelectionContainer.m_FullClipSelection) { MarkerElement.SelectMarkerElement(me, m_Owner.SelectionContainer.Count > 1); } me.MarkerElementDragged += OnMarkerElementDragged; me.Selected += OnMarkerSelected; return(me); }
public MarkerManipulator(MarkerElement markerElement) : base(markerElement) { }
void OnMarkerElementDragged(MarkerElement marker, float previousTime, float newTime, float previousX, float newX) { CreateMarkerOverlapIndicators(); }
void CreateMarkerOverlapIndicators() { Profiler.BeginSample("MarkerTrack::ComputeInitialOverlaps"); foreach (var indicator in m_MarkerOverlapIndicators) { indicator.RemoveFromHierarchy(); } m_MarkerOverlapIndicators.Clear(); if (Clip != null) { List <MarkerElement> elements = GetMarkerElements().OrderBy(me => me.style.left.value.value).ToList(); List <Tuple <float, List <MarkerElement> > > positions = new List <Tuple <float, List <MarkerElement> > >(); if (elements.Any()) { MarkerElement currentElement = elements[0]; if (elements.Count == 1) { positions.Add(new Tuple <float, List <MarkerElement> >(currentElement.XPos, elements)); } else { List <MarkerElement> grouped = new List <MarkerElement>(); grouped.Add(currentElement); for (var index = 1; index < elements.Count; index++) { MarkerElement marker = elements[index]; float pos = marker.XPos; if (pos - currentElement.XPos < k_MarkerPositionEpsilon) { //add nearby position grouped.Add(marker); } else { //close group positions.Add(new Tuple <float, List <MarkerElement> >(Mid(grouped), grouped)); currentElement = marker; grouped = new List <MarkerElement>(); grouped.Add(currentElement); } } //close final group positions.Add(new Tuple <float, List <MarkerElement> >(Mid(grouped), grouped)); } } foreach ((float overlapPosition, List <MarkerElement> markerElements) in positions) { if (markerElements.Count > 1) { var indicator = new MarkerOverlapIndicator(this, overlapPosition); m_MarkerOverlapIndicators.Add(indicator); Add(indicator); indicator.Reposition(); } } } Profiler.EndSample(); }