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();
        }
示例#2
0
        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);
        }
示例#3
0
 public MarkerManipulator(MarkerElement markerElement) : base(markerElement)
 {
 }
示例#4
0
 void OnMarkerElementDragged(MarkerElement marker, float previousTime, float newTime, float previousX, float newX)
 {
     CreateMarkerOverlapIndicators();
 }
示例#5
0
        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();
        }