コード例 #1
0
        public override void OnDrag(Vector2 pos)
        {
            int frame = FrameUtil.PosToFrame(pos.x);

            if (!hasModify)
            {
                if (frame != hitResult.Frame)
                {
                    hasModify = true;
                    view.RegistUndo("move clip");
                }
            }
            if (hasModify)
            {
                if (hitResult.HitPart == FrameClipHitPartType.LeftCtrl)
                {
                    foreach (var clipRef in view.SelectedClips)
                    {
                        int startFrame = clipRef.Clip.StartFrame - (frame - lastFrame);
                        startFrame = Mathf.Clamp(startFrame, 0, view.FrameCount - 1);
                        clipRef.Clip.StartFrame = startFrame;
                    }
                }
                else if (hitResult.HitPart == FrameClipHitPartType.RightCtrl)
                {
                }
                lastFrame = frame;
                TrackUtil.UpdateAllTrack(view.Asset);
            }
        }
コード例 #2
0
 public static void RemoveSelectedClip(this FrameLineView view)
 {
     view.RegistUndo("remove clips");
     foreach (var clipRef in view.SelectedClips)
     {
         view.Asset.RemoveClip(clipRef);
     }
     view.SelectedClips.Clear();
     TrackUtil.UpdateAllTrack(view.Asset);
 }
コード例 #3
0
 public static void MoveSelectedClip(this FrameLineView view, int offsetFrame)
 {
     foreach (var clipRef in view.SelectedClips)
     {
         int startFrame = clipRef.Clip.StartFrame - offsetFrame;
         startFrame = Mathf.Clamp(startFrame, 0, view.FrameCount - 1);
         clipRef.Clip.StartFrame = startFrame;
     }
     TrackUtil.UpdateAllTrack(view.Asset);
 }
コード例 #4
0
        public static void MoveClipEnd(this FrameLineView view, FrameClipRef clipRef, int frame)
        {
            if (frame >= view.FrameCount)
            {
                return;
            }
            if (clipRef.Clip.Length <= 0 && frame == (view.FrameCount - 1))
            {
                return;
            }
            clipRef.Clip.Length = frame - clipRef.Clip.StartFrame + 1;
            var track = view.Asset.FindTrack(clipRef.Clip.TrackID);

            TrackUtil.UpdateClipTrackIndex(track);
        }
コード例 #5
0
        public static void MoveClipStart(this FrameLineView view, FrameClipRef clipRef, int frame)
        {
            if (frame < 0)
            {
                return;
            }
            int lastStart = clipRef.Clip.StartFrame;

            clipRef.Clip.StartFrame = frame;
            if (clipRef.Clip.Length > 0)
            {
                int length = clipRef.Clip.Length + (frame - lastStart);
                clipRef.Clip.Length = Mathf.Max(length, 1);
            }
            var track = view.Asset.FindTrack(clipRef.Clip.TrackID);

            TrackUtil.UpdateClipTrackIndex(track);
        }
コード例 #6
0
        public bool OnDraw(Vector2 size)
        {
            int   showTrackCount = TrackUtil.GetVisableTrackCount(Asset);
            float frameHeight    = showTrackCount * (ViewStyles.ClipHeight + ViewStyles.ClipVInterval) + ViewStyles.ClipVInterval;
            float framWidth      = Asset.FrameCount * ViewStyles.FrameWidth + 10;

            //滚动位置
            float xOffset = ScrollPos.x * framWidth;
            float yOffset = ScrollPos.y * frameHeight;

            VisableFrameStart = Mathf.FloorToInt(xOffset / ViewStyles.FrameWidth);
            VisableTrackStart = Mathf.FloorToInt(yOffset / (ViewStyles.FrameWidth + ViewStyles.ClipVInterval));

            //轨道头部
            Rect trackHeadRect = new Rect(0, 0, ViewStyles.TrackHeadWidth, size.y - ViewStyles.ScrollBarSize);
            bool rePaint       = false;

            using (new GUILayout.AreaScope(trackHeadRect))
            {
                //轨道头部按钮区域
                using (new GUILayout.AreaScope(new Rect(0, 0, trackHeadRect.width, ViewStyles.FrameBarHeight), "", EditorStyles.toolbar))
                {
                    using (new GUILayout.HorizontalScope())
                    {
                        DrawToolBar();
                    }
                }
                Rect rect = new Rect(0, ViewStyles.FrameBarHeight, trackHeadRect.width, trackHeadRect.height - ViewStyles.FrameBarHeight);
                VisableTrackEnd = Mathf.CeilToInt((rect.height + yOffset - VisableTrackStart * (ViewStyles.ClipHeight + ViewStyles.ClipVInterval)) / (ViewStyles.ClipHeight + ViewStyles.ClipVInterval));
                //轨道头部
                using (new GUI.ClipScope(rect))
                {
                    //滚动位置
                    Rect viewRect = new Rect(0, -yOffset, trackHeadRect.width, frameHeight);
                    using (new GUILayout.AreaScope(viewRect))
                    {
                        var e = Event.current;
                        if (viewRect.Contains(e.mousePosition))
                        {
                            rePaint |= OnTrackHeadEvent(e);
                        }

                        DrawTrackHead();
                    }
                }
            }
            //轨道区域大小
            Vector2 trackAreaSize = new Vector2(framWidth, frameHeight);
            //轨道区域
            Rect frameRect = new Rect(ViewStyles.TrackHeadWidth, 0, size.x - ViewStyles.TrackHeadWidth - ViewStyles.ScrollBarSize, size.y - ViewStyles.ScrollBarSize);
            //轨道在窗口中显示的大小
            Vector2 trackAreaInViewSize = new Vector2(frameRect.width, frameRect.height - ViewStyles.FrameBarHeight);

            using (new GUI.ClipScope(frameRect))
            {
                VisableFrameEnd = Mathf.CeilToInt((frameRect.width + xOffset - VisableFrameStart * ViewStyles.FrameWidth) / ViewStyles.FrameWidth) + VisableFrameStart;
                //画帧标号背景条
                GUI.Box(new Rect(0, 0, frameRect.width, ViewStyles.FrameBarHeight), "");
                //帧长度区域|<-所有帧->|,水平滚动区域
                using (new GUILayout.AreaScope(new Rect(-xOffset, 0, framWidth, frameRect.height)))
                {
                    DrawFrameLineBackGround(new Rect(new Vector2(xOffset, 0), frameRect.size));
                    {
                        var e = Event.current;
                        if (e.mousePosition.y < ViewStyles.FrameBarHeight)
                        {
                            rePaint |= OnFrameBarEvent(e);
                        }
                    }
                    //轨道条区域
                    using (new GUI.ClipScope(new Rect(0, ViewStyles.FrameBarHeight, framWidth, frameHeight)))
                    {
                        Rect trackViewRect = new Rect(0, -yOffset, framWidth, frameHeight);
                        using (new GUILayout.AreaScope(trackViewRect))
                        {
                            var     e           = Event.current;
                            Vector2 mousePos    = e.mousePosition;
                            bool    mouseInView = trackViewRect.Contains(mousePos);
                            if (mouseInView || dragOperate != null)
                            {
                                rePaint |= OnFrameClipsEvent(e);
                            }
                            DrawFrameClips(mouseInView, mousePos);
                        }
                    }
                }
            }
            Rect  vBarRect = new Rect(size.x - ViewStyles.ScrollBarSize, 0, ViewStyles.ScrollBarSize, size.y - ViewStyles.ScrollBarSize);
            float vSize    = Mathf.Clamp01(trackAreaInViewSize.y / trackAreaSize.y);

            ScrollPos.y = GUI.VerticalScrollbar(vBarRect, ScrollPos.y, vSize, 0, 1);
            Rect  hBarRect = new Rect(ViewStyles.TrackHeadWidth, size.y - ViewStyles.ScrollBarSize, size.x - ViewStyles.TrackHeadWidth - ViewStyles.ScrollBarSize, ViewStyles.ScrollBarSize);
            float hSize    = Mathf.Clamp01(trackAreaInViewSize.x / trackAreaSize.x);

            ScrollPos.x = GUI.HorizontalScrollbar(hBarRect, ScrollPos.x, hSize, 0, 1);
            return(rePaint);
        }