From 8f19fde27a551f9926ce1f1224b275f748409c03 Mon Sep 17 00:00:00 2001 From: Cristhofer Marques Date: Wed, 28 Sep 2022 19:06:20 -0300 Subject: [PATCH] Update TimelineEdge.cs --- .../Editor/GUI/Timeline/GUI/TimelineEdge.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Source/Editor/GUI/Timeline/GUI/TimelineEdge.cs b/Source/Editor/GUI/Timeline/GUI/TimelineEdge.cs index 0f1da6e9b..2d93fb79b 100644 --- a/Source/Editor/GUI/Timeline/GUI/TimelineEdge.cs +++ b/Source/Editor/GUI/Timeline/GUI/TimelineEdge.cs @@ -15,6 +15,8 @@ namespace FlaxEditor.GUI.Timeline.GUI private Timeline _timeline; private bool _isMoving; private Float2 _startMoveLocation; + private Float2 _lastMouseLocation; + private float _flipScreenMoveDelta; private int _startMoveDuration; private bool _isStart; private bool _canEdit; @@ -71,11 +73,30 @@ namespace FlaxEditor.GUI.Timeline.GUI { if (_isMoving) { + Float2 currWndCenter = _timeline.RootWindow.Window.ClientBounds.Center; + Float2 currMonitorSize = Platform.GetMonitorBounds(currWndCenter).Size; var moveLocation = Root.MousePosition; - var moveLocationDelta = moveLocation - _startMoveLocation; + var diffFromLastMoveLocation = Mathf.Max(_lastMouseLocation.X, moveLocation.X) - Mathf.Min(_lastMouseLocation.X, moveLocation.X); + var movePorcentOfXMonitorSize = diffFromLastMoveLocation * 100f / currMonitorSize.X; + + if (movePorcentOfXMonitorSize >= 90f) + { + if (_lastMouseLocation.X > moveLocation.X) + { + _flipScreenMoveDelta += currMonitorSize.X; + } + else + { + _flipScreenMoveDelta -= currMonitorSize.X; + } + } + + var moveLocationDelta = moveLocation - _startMoveLocation + _flipScreenMoveDelta; var moveDelta = (int)(moveLocationDelta.X / (Timeline.UnitsPerSecond * _timeline.Zoom) * _timeline.FramesPerSecond); var durationFrames = _timeline.DurationFrames; + + if (_isStart) { // TODO: editing timeline start frame? @@ -83,12 +104,16 @@ namespace FlaxEditor.GUI.Timeline.GUI else { _timeline.DurationFrames = _startMoveDuration + moveDelta; + _timeline.MediaBackground.HScrollBar.Value = _timeline.MediaBackground.HScrollBar.Maximum; } if (_timeline.DurationFrames != durationFrames) { _timeline.MarkAsEdited(); } + + _lastMouseLocation = moveLocation; + } else { @@ -140,6 +165,8 @@ namespace FlaxEditor.GUI.Timeline.GUI _timeline.DurationFrames = duration; } _isMoving = false; + _flipScreenMoveDelta = 0; + _timeline.MediaBackground.HScrollBar.Value = _timeline.MediaBackground.HScrollBar.Maximum; EndMouseCapture(); }