auto scroll to new track when adding track to timeline

This commit is contained in:
Saas
2026-03-18 21:40:22 +01:00
parent f42a9a760a
commit 65b35a4b8a
+18 -5
View File
@@ -229,6 +229,7 @@ namespace FlaxEditor.GUI.Timeline
private List<Track> _mediaMoveStartTracks;
private byte[][] _mediaMoveStartData;
private float _zoom = 1.0f;
private float _tracksVScrollTarget = 0f;
private bool _isMovingPositionHandle;
private bool _canPlayPause = true, _canStop = true;
private List<IUndoAction> _batchedUndoActions;
@@ -898,6 +899,8 @@ namespace FlaxEditor.GUI.Timeline
};
UpdatePositionHandle();
PlaybackState = PlaybackStates.Disabled;
_tracksVScrollTarget = _tracksPanelArea.VScrollBar.TargetValue;
}
private void UpdatePositionHandle()
@@ -1305,6 +1308,10 @@ namespace FlaxEditor.GUI.Timeline
MarkAsEdited();
if (withUndo)
Undo?.AddAction(new AddRemoveTrackAction(this, track, true));
// Scroll to track
_tracksPanelArea.ScrollViewTo(track);
_tracksVScrollTarget = _tracksPanelArea.VScrollBar.TargetValue;
}
/// <summary>
@@ -2033,12 +2040,18 @@ namespace FlaxEditor.GUI.Timeline
base.Update(deltaTime);
// Synchronize scroll vertical bars for tracks and media panels to keep the view in sync
var scroll1 = _tracksPanelArea.VScrollBar;
var scroll2 = _backgroundArea.VScrollBar;
if (scroll1.IsThumbClicked || _tracksPanelArea.IsMouseOver)
scroll2.TargetValue = scroll1.Value;
var tracksVScroll = _tracksPanelArea.VScrollBar;
var backgroundVScroll = _backgroundArea.VScrollBar;
bool forceBackgroundToTracksScroll = !Mathf.WithinEpsilon(_tracksVScrollTarget - tracksVScroll.Value, 0f, 5f);
if (tracksVScroll.IsThumbClicked || _tracksPanelArea.IsMouseOver || forceBackgroundToTracksScroll)
{
backgroundVScroll.TargetValue = tracksVScroll.Value;
}
else
scroll1.TargetValue = scroll2.Value;
{
_tracksVScrollTarget = 0f;
tracksVScroll.TargetValue = backgroundVScroll.Value;
}
// Batch undo actions
if (_batchedUndoActions != null && _batchedUndoActions.Count != 0)